Can I pass queue object in multiprocessing pool starmap method(我可以在多处理池Starmap方法中传递队列对象吗)
本文介绍了我可以在多处理池Starmap方法中传递队列对象吗的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
关于在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方法也应该能够。
推荐答案
尝试这样使用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
这篇关于我可以在多处理池Starmap方法中传递队列对象吗的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
编程基础网
本文标题为:我可以在多处理池Starmap方法中传递队列对象吗
基础教程推荐
猜你喜欢
- 由Python将MP3转换为MIDI(类型错误:无法加载插件:mtg-Melodia:Melodia) 2022-01-01
- pyserial - 可以从线程 a 写入串行端口,是否阻塞从线程 b 读取? 2022-01-01
- 使用生成器和迭代器时 Python 多循环失败 2022-01-01
- 在 Celery 工作人员中捕获 Heroku SIGTERM 以优雅地关 2022-01-01
- 将 x 轴刻度更改为自定义字符串 2022-01-01
- numpy float:比算术运算中内置的慢 10 倍? 2022-01-01
- 尝试制作WhatsApp机器人 2022-01-01
- 用 Python 编写 Fortran 无格式文件 2022-01-01
- 与常规 dict 相比,Python manager.dict() 非常慢 2022-01-01
- Discord.py 缺少必需的参数 2022-01-01
