我在某处看到此代码,并且无法理解它如何正常工作:
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 文档说“一个进程可以多次加入”。为什么要多次加入这一进程?如果它已经终止,那么检查它是否再次终止的目的是什么?