0

我在某处看到此代码,并且无法理解它如何正常工作:

out_q = Queue()
chunksize = int(math.ceil(len(nums) / float(nprocs)))
procs = []

for i in range(nprocs):
    p = multiprocessing.Process(
            target=worker,
            args=(nums[chunksize * i:chunksize * (i + 1)],
                  out_q))
    procs.append(p)
    p.start()

# Collect all results into a single result dict. We know how many dicts
# with results to expect.
resultdict = {}
for i in range(nprocs):
    resultdict.update(out_q.get())

time.sleep(5)

# Wait for all worker processes to finish
for p in procs:
    p.join()

print resultdict

time.sleep(15)

在我看来,在查询队列以获取其输出之前等待所有进程终止是有意义的。如何确定在启动所有进程后立即查询队列时,队列将包含所有输出?(即,如果一个工作人员完成所花费的时间相对长于启动所有进程然后开始查看队列所花费的时间,会发生什么情况)

另一个稍微相关的问题:Python 文档说“一个进程可以多次加入”。为什么要多次加入这一进程?如果它已经终止,那么检查它是否再次终止的目的是什么?

4

1 回答 1

1

在我看来,在查询队列以获取其输出之前等待所有进程终止是有意义的。

没错,它是这样工作的。

如何确定在启动所有进程后立即查询队列时,队列将包含所有输出?

它将等到最后一个过程起作用。

为什么要多次加入这一进程?

有时我们需要多次运行一个进程,比如我们想用其他或相同的参数一次又一次地更新一个变量,并说我们有很多时间直到“最慢”的进程没有完成。

于 2015-08-06T21:50:09.150 回答