在几个进程之间共享一个结果队列

multiprocessing模块的文档显示了如何将一个队列传递multiprocessing.Process启动的进程。 但是,我怎样才能与由apply_async启动的asynchronous工作进程共享一个队列呢? 我不需要dynamicjoin或其他任何东西,只是一种让工人(反复)将结果报告回基地的方法。

 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 。 我明白这意味着什么,我理解inheritance的build议,而不是要求酸洗/取消(以及所有特殊的Windows限制)。 但是我如何以一种有效的方式来传递队列呢? 我找不到一个例子,而且我尝试了几种以各种方式失败的替代scheme。 请帮助?

尝试使用multiprocessing.manager来pipe理您的队列,并使其可以被不同的工作人员访问。

 import multiprocessing def worker(name, que): que.put("%d is done" % name) if __name__ == '__main__': pool = multiprocessing.Pool(processes=3) m = multiprocessing.Manager() q = m.Queue() workers = pool.apply_async(worker, (33, q))