python - 在多个进程之间共享一个结果队列

标签 python parallel-processing queue multiprocessing python-multiprocessing

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/

相关文章:

python - 动态模板标签

python - 如何解析txt文件末尾的json格式文本

python - "ValueError: object too deep for desired array"是什么意思以及如何修复它?

python - 对以小写字母或大写字母开头的带重音符号的名称进行排序

c - 并行 (CUDA) 二维泊松求解器

java - 仅使用堆栈和标准 API 类通过反转来修改队列内容的方法?

java - 队列中的Java线程一旦完成任务,就需要 hibernate

c++ - 如何使用一些 MPI 命令(或组合命令)在两个处理器之间交换存储在二维数组中的数据?

c - 尝试读取大文件时 MPI_File_read_at_all 给出无效的计数参数

linux - lftp + bash 脚本 + 变量