【发布时间】:2016-11-10 20:17:27
【问题描述】:
我试图创建一个可以异步运行多个进程并发送响应的函数。由于multiprocessing.Process()不返回响应,我想创建一个函数为:
from multiprocessing import Process
def async_call(func_list):
"""
Runs the list of function asynchronously.
:param func_list: Expects list of lists to be of format
[[func1, args1, kwargs1], [func2, args2, kwargs2], ...]
:return: List of output of the functions
[output1, output2, ...]
"""
response_list = []
def worker(function, f_args, f_kwargs, response_list):
"""
Runs the function and appends the output to list
"""
response = function(*f_args, **f_kwargs)
response_list.append(response)
processes = [Process(target=worker, args=(func, args, kwargs, response_list)) \
for func, args, kwargs in func_list]
for process in processes:
process.start()
for process in processes:
process.join()
return response_list
在这个函数中,我异步调用worker,它接受附加参数为list。由于列表作为参考传递,我想我可以在列表中附加实际函数的响应。 async_call 会返回所有函数的响应。
但这并不符合我的预期。值被附加到worker() 内的list,但在工作人员之外response_list 列表仍然为空。
知道我做错了什么吗?而且,有没有其他方法可以实现我正在做的事情?
【问题讨论】:
标签: python asynchronous multiprocessing