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

Python 我可以在多处理池星图方法中传递队列对象吗,python,python-3.x,python-multiprocessing,Python,Python 3.x,Python Multiprocessing,关于在python多处理池的starmap方法中传递多个参数,SO中有许多问题。但我想问的是,我是否可以在方法中发送一个队列对象,该对象可以在不同进程之间共享 我可以使用线程和多处理方法来实现这一点,但不能使用Pool的星图方法 from multiprocessing import Process, Queue, Pool def get_data(pageNo,q): q.put(pageNo*pageNo) if __name__ == "__main__": q

关于在python多处理池的starmap方法中传递多个参数,SO中有许多问题。但我想问的是,我是否可以在方法中发送一个队列对象,该对象可以在不同进程之间共享

我可以使用线程和多处理方法来实现这一点,但不能使用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)
我想要的是,我应该能够将结果放入来自不同进程的队列中。 我得到的错误是:队列对象只能通过继承在进程之间共享

我传递队列对象的方式是否有问题?既然流程支持这一点,那么Pool方法也应该能够。

尝试这样使用:

来自多处理导入管理器,池
def get_数据(页码,q):
q、 put(页码*页码)
如果名称=“\uuuuu main\uuuuuuuu”:
m=经理()
q=m.Queue()
p={}
无页数=5页
pool_tuple=[(x,q)表示范围内的x(1,无页面)]
将池(进程=3)作为池:
starmap(获取池数据、池元组)
对于范围内的i(1,无页面):
打印(“结果”,i,:”,q.get()
输出:

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

为什么经理会在这里起作用?@quamrana来自我链接到的文档:
Manager()返回的经理对象控制一个服务器进程,该进程保存Python对象,并允许其他进程使用代理操作它们。
我个人不知道它是如何在内部实现的。与oh wow@RomanPerekhrest一样,完全重复,我在回答之前甚至没有检查过。。。对不起。我想还有一个剩余的
p={}
没有任何用途?