このコードがどこかに投稿されているのを見て、それがどのように適切に機能するかを理解するのに苦労していました:
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)
キューに出力を問い合わせる前に、すべてのプロセスが終了するのを待つのが理にかなっているように思えます。すべてのプロセスを開始した直後にキューを照会する際に、キューにすべての出力が含まれていることをどのように確認できますか? (つまり、ワーカーが完了するのにかかる時間が、すべてのプロセスを開始してからキューを調べ始めるのにかかる時間よりも相対的に長い場合はどうなるでしょうか)
少し関連したもう 1 つの質問: Python のドキュメントには、「プロセスは何度も参加できる」と記載されています。プロセスに複数回参加する必要があるのはなぜですか? すでに終了している場合、再び終了したことを確認する目的は何ですか?