最佳答案
multiprocessing
模块的文档显示了如何将队列传递给以 multiprocessing.Process
启动的进程。但是我如何能够与用 apply_async
启动的异步工作进程共享一个队列呢?我不需要动态加入或其他任何东西,只是一种方式,为工人(重复)报告他们的结果回基地。
import multiprocessing
def worker(name, que):
que.put("%d is done" % name)
if __name__ == '__main__':
pool = multiprocessing.Pool(processes=3)
q = multiprocessing.Queue()
workers = pool.apply_async(worker, (33, q))
这种做法失败的原因是:
RuntimeError: Queue objects should only be shared between processes through inheritance
.
我理解这意味着什么,也理解继承而不是要求 pickle/unpickle (以及所有特殊的 Windows 限制)的建议。但是 do如何以一种有效的方式传递队列呢?我找不到一个例子,而且我已经尝试了几种方法,但都以各种方式失败了。救命啊?