|  | #!/usr/bin/env python3 | 
|  |  | 
|  | r""" | 
|  | This module contains keyword functions to support multiprocessing | 
|  | execution of keywords where generic robot keywords don't support. | 
|  |  | 
|  | """ | 
|  |  | 
|  | import datetime | 
|  | import os | 
|  | from multiprocessing import Manager, Process | 
|  |  | 
|  | from robot.libraries.BuiltIn import BuiltIn | 
|  |  | 
|  |  | 
|  | 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 | 
|  |  | 
|  |  | 
|  | def execute_keyword_args(keyword_name, args, return_dict): | 
|  | r""" | 
|  | Execute a robot keyword with arguments. | 
|  | 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. | 
|  | args            Arguments to keyword. | 
|  | return_dict     A dictionary consisting of pid/process status for the | 
|  | keys/values. This function will append a new entry to | 
|  | this dictionary. | 
|  | """ | 
|  |  | 
|  | execution_time = datetime.datetime.now() | 
|  |  | 
|  | status = BuiltIn().run_keyword_and_return_status(keyword_name, *args) | 
|  |  | 
|  | # Build execution time:<status> dictionary. | 
|  | return_dict[str(execution_time)] = str(status) | 
|  |  | 
|  |  | 
|  | def execute_process_multi_keyword(number_args, *keyword_names): | 
|  | r""" | 
|  | Execute multiple robot keywords with arguments via multiprocessing process. | 
|  |  | 
|  | Description of argument(s): | 
|  | number_args       Number of argument in keywords. | 
|  | keyword_names     Keyword name to be executed. | 
|  | """ | 
|  |  | 
|  | manager = Manager() | 
|  | return_dict = manager.dict() | 
|  | process_list = [] | 
|  | # Append each keyword with its arguments in a process to execute. | 
|  | for keywords_data in keyword_names: | 
|  | keyword_args = tuple(keywords_data.split(" ")[-number_args:]) | 
|  | keyword_name = " ".join(keywords_data.split(" ")[:-number_args]) | 
|  | task = Process( | 
|  | target=execute_keyword_args, | 
|  | args=(keyword_name, keyword_args, return_dict), | 
|  | ) | 
|  | process_list.append(task) | 
|  | task.start() | 
|  |  | 
|  | # Wait for process to complete. | 
|  | for task in process_list: | 
|  | task.join() | 
|  | return return_dict.copy() | 
|  |  | 
|  |  | 
|  | def get_current_date_time(): | 
|  | r""" | 
|  | Gets current time. | 
|  | """ | 
|  |  | 
|  | current_time = datetime.datetime.now().strftime("%H:%M:%S.%f") | 
|  | return current_time |