python - 我可以在多处理池星图方法中传递队列对象吗

标签 python python-3.x python-multiprocessing

<分区>

SO中有很多关于在python multiprocessing Pool的starmap方法中传递多个参数的问题。但我想问的是,能否在方法中发送一个队列对象,让不同进程共享?

我可以使用线程和多处理 Process 方法来执行此操作,但不能使用 Pool 的星图方法。

from multiprocessing import Process, Queue, Pool


def get_data(pageNo,q):
    q.put(pageNo*pageNo)


if __name__ == "__main__":
    q = Queue()
    p = {}
    no_pages = 5
    pool_tuple = [(x,q) for x in range(1,no_pages)]
    with Pool(processes=3) as pool:
        pool.starmap(get_data, pool_tuple)

我想要的是我应该能够将来自不同进程的结果放入队列中。 我得到的错误是:队列对象只能通过继承在进程之间共享

我传递队列对象的方式有问题吗?因为如果 Process 支持这一点,那么 Pool 方法也应该能够支持。

最佳答案

尝试使用 Manager()像这样:

from multiprocessing import Manager, Pool


def get_data(pageNo, q):
    q.put(pageNo * pageNo)


if __name__ == "__main__":
    m = Manager()
    q = m.Queue()
    p = {}
    no_pages = 5
    pool_tuple = [(x, q) for x in range(1, no_pages)]
    with Pool(processes=3) as pool:
        pool.starmap(get_data, pool_tuple)
    for i in range(1, no_pages):
        print("result", i, ":", q.get())

输出:

result 1 : 1
result 2 : 4
result 3 : 9
result 4 : 16

关于python - 我可以在多处理池星图方法中传递队列对象吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57657490/

相关文章:

python - 在 Python 中将 unicode 代码点转换为 unicode 字符

python - 如何删除具有一定计数条件的列

image - 如何将图像重新缩放为标准尺寸?

Python pickle 和多处理

python - * : 'Nonetype' and 'Float' with array problem [duplicate]的不受支持的操作数类型的Python错误

python - AWS Cognito 和 Lambda : add federated identity to user pool

python-3.x - 多处理/for 循环随机跳过元素

Python 多处理 - 对象没有属性

python脚本卡在带有多处理代码的导入模块上

python - 在 Flask App 中启动后台守护进程