在几个进程之间共享一个结果队列
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))