1#!/usr/bin/env python
2
3r"""
4This module contains keyword functions to support multiprocessing
5execution of keywords where generic robot keywords don't support.
6
7"""
8
9from robot.libraries.BuiltIn import BuiltIn
10from multiprocessing import Process, Manager
11import os
12import gen_print as gp
13
14
15###############################################################################
16def execute_keyword(keyword_name, return_dict):
17    r"""
18    Execute a robot keyword.
19    In addition to running the caller's keyword, this function will:
20    - Add an entry to the return_dict
21
22    Description of argument(s):
23    keyword_name    Keyword name to be executed.
24    return_dict     A dictionary consisting of pid/process status for the
25                    keys/values. This function will append a new entry to
26                    this dictionary.
27    """
28
29    pid = os.getpid()
30    status = BuiltIn().run_keyword_and_return_status(keyword_name)
31
32    # Build PID:<status> dictionary.
33    return_dict[str(pid)] = str(status)
34
35###############################################################################
36
37
38###############################################################################
39def execute_process(num_process, keyword_name):
40    r"""
41    Execute a robot keyword via multiprocessing process.
42
43    Description of argument(s):
44    num_process         Number of times keyword to be executed.
45    keyword_name     Keyword name to be executed.
46    """
47
48    manager = Manager()
49    return_dict = manager.dict()
50    process_list = []
51
52    # Append user-defined times process needed to execute.
53    for ix in range(int(num_process)):
54        task = Process(target=execute_keyword, args=(keyword_name, return_dict))
55        process_list.append(task)
56        task.start()
57
58    # Wait for process to complete.
59    for task in process_list:
60        task.join()
61
62    # Return function return codes.
63    return return_dict
64
65###############################################################################
66