| #!/usr/bin/env python | 
 |  | 
 | r""" | 
 | This module contains keyword functions to support multiprocessing | 
 | execution of keywords where generic robot keywords don't support. | 
 |  | 
 | """ | 
 |  | 
 | from robot.libraries.BuiltIn import BuiltIn | 
 | from multiprocessing import Process, Manager | 
 | import os | 
 | import gen_print as gp | 
 |  | 
 |  | 
 | def execute_keyword(keyword_name, return_dict): | 
 |     r""" | 
 |     Execute a robot keyword. | 
 |     In addition to running the caller's keyword, this function will: | 
 |     - Add an entry to the return_dict | 
 |  | 
 |     Description of argument(s): | 
 |     keyword_name    Keyword name to be executed. | 
 |     return_dict     A dictionary consisting of pid/process status for the | 
 |                     keys/values. This function will append a new entry to | 
 |                     this dictionary. | 
 |     """ | 
 |  | 
 |     pid = os.getpid() | 
 |     status = BuiltIn().run_keyword_and_return_status(keyword_name) | 
 |  | 
 |     # Build PID:<status> dictionary. | 
 |     return_dict[str(pid)] = str(status) | 
 |  | 
 |  | 
 | def execute_process(num_process, keyword_name): | 
 |     r""" | 
 |     Execute a robot keyword via multiprocessing process. | 
 |  | 
 |     Description of argument(s): | 
 |     num_process         Number of times keyword to be executed. | 
 |     keyword_name     Keyword name to be executed. | 
 |     """ | 
 |  | 
 |     manager = Manager() | 
 |     return_dict = manager.dict() | 
 |     process_list = [] | 
 |  | 
 |     # Append user-defined times process needed to execute. | 
 |     for ix in range(int(num_process)): | 
 |         task = Process(target=execute_keyword, | 
 |                        args=(keyword_name, return_dict)) | 
 |         process_list.append(task) | 
 |         task.start() | 
 |  | 
 |     # Wait for process to complete. | 
 |     for task in process_list: | 
 |         task.join() | 
 |  | 
 |     # Return function return codes. | 
 |     return return_dict |