blob: c730652a261c3a75c48ea8026758d3d0a844569d [file] [log] [blame]
#!/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 output for the
keys/values. This function will append a new entry to
this dictionary.
"""
pid = os.getpid()
output = BuiltIn().run_keyword(keyword_name)
# Build PID:<output> dictionary.
return_dict[str(pid)] = str(output)
###############################################################################
###############################################################################
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
###############################################################################