【发布时间】:2021-06-23 16:27:45
【问题描述】:
我想在多处理计算中将输出数据放入队列中。似乎是当return的大小太大时,程序就卡住了。为了说明这个问题,这里有一个最小的代码。任何人都可以帮助完成这项工作吗?
from multiprocessing import Process, Queue
import numpy as np
def foo(q, qid):
x = np.random.randint(0,5,7)
y = np.random.random(100*10*10).reshape(100,10,10)
q.put([qid,x,y])
def main():
processes = []
q = Queue()
for qid in range(5):
p = Process(target=foo, args=(q, qid))
p.start()
processes.append(p)
for process in processes:
process.join()
for qid in range(5):
[_, x, y] = q.get()
print(x)
print(y)
if __name__ == '__main__':
main()
【问题讨论】:
-
“卡住”是什么意思?没有错误信息?锁上?还是只是需要很长时间?从较小的数据开始,以确保您的程序按预期工作,然后慢慢增加数据大小。
-
较小的数据效果很好。对于上面的示例,它只是卡住而没有错误消息。调试器可以运行到 q.put()
-
可能会有很好的答案here 或许你可以通过给每个进程自己的队列来扩大规模,但正如上面的链接会告诉你的,队列存在潜在的实现问题。
标签: python python-3.x python-multiprocessing