我有一个使用多重处理的简单程序。它基本上执行数学运算并将结果写入队列。我可以看到队列大小在多处理函数内部增长,但是一旦我进入主线程/进程,队列就是空的。这似乎是某种我不理解的范围问题。有人可以解释为什么一旦在函数之外队列就为空吗?我已经尝试过将队列作为参数传递给函数以及其他方法,但它似乎总是空的。
from multiprocessing import Pool, Process
import math
import Queue
q = Queue.Queue(maxsize=0)
def compute_and_write(val):
sq = val * val
sq = math.sqrt(sq)
sq = sq + sq + sq
q.put("Q" + str(sq))
print "Queue size (inside) = " + str(q.qsize())
return sq
p = Pool(8)
y = []
for x in range(1, 100):
y.append(x)
res = p.map(compute_and_write, y)
print "Queue size (outside) = " + str(q.qsize())
最佳答案
Queue.Queue
与跨进程行为方面的列表或字典没有什么不同:每个进程都有自己不同的对象,并且一个进程副本中的更改不会产生任何影响完全在任何其他进程的副本上。
您需要一个multiprocessing.Queue
。它被设计为具有跨进程可见的状态。这就是它应该有的全部内容。
关于python - 为什么我看不到 Python 主线程中子进程中写入的队列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49143359/