为什么可以';我在Python主线程的子进程中没有看到写入的队列吗?

为什么可以';我在Python主线程的子进程中没有看到写入的队列吗?,python,python-2.7,python-multiprocessing,Python,Python 2.7,Python Multiprocessing,我有一个使用多处理器的简单程序。它基本上执行数学运算并将结果写入队列。我可以看到多进程函数内部的队列大小在增长,但一旦我在主线程/进程外部,队列就为空。这似乎是某种我不理解的范围界定问题。有人能解释一下为什么队列在函数之外是空的吗?我尝试过将队列作为参数传递给函数,以及其他方法,但它似乎总是空的 from multiprocessing import Pool, Process import math import Queue q = Queue.Queue(maxsize=0) def

我有一个使用多处理器的简单程序。它基本上执行数学运算并将结果写入队列。我可以看到多进程函数内部的队列大小在增长,但一旦我在主线程/进程外部,队列就为空。这似乎是某种我不理解的范围界定问题。有人能解释一下为什么队列在函数之外是空的吗?我尝试过将队列作为参数传递给函数,以及其他方法,但它似乎总是空的

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())

队列。队列在跨进程行为方面与列表或dict没有什么不同:每个进程都有自己不同的对象,一个进程副本中的更改对任何其他进程的副本都没有任何影响


您需要一个
多处理.Queue
。它的设计目的是使状态在整个流程中可见。这就是它的全部内容。

非常感谢。我是多处理机新手。成功了。