multiprocessing
模块的文档展示了如何将队列传递给以 multiprocessing.Process
启动的进程。但是如何与以 apply_async
开始的异步工作进程共享队列?我不需要动态加入或其他任何东西,只是让 worker (反复)将他们的结果报告回基地的一种方式。
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: 队列对象只能通过继承在进程之间共享
。
我理解这意味着什么,并且我理解继承而不是要求酸洗/解酸(以及所有特殊的 Windows 限制)的建议。但是如何我如何以一种有效的方式传递队列?我找不到一个例子,我尝试了几种以各种方式失败的替代方案。请帮忙?
最佳答案
尝试使用 multiprocessing.Manager管理您的队列并使其可供不同的工作人员访问。
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))
关于python - 在多个进程之间共享一个结果队列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9908781/