-1
我正在使用python多進程庫來處理一組進程中的信息。這些過程還包含進一步劃分必須完成的工作量的過程。有一個Manager.Queue積累了所有消耗數據的進程的結果。Python進程在IO完成之前終止
在python腳本的主線程中。我試圖使用連接來阻塞主線程,直到我們可以合理確定所有子進程是否完成,然後將輸出寫入單個文件。但是,在所有數據寫入文件之前,系統會終止並關閉文件。
以下代碼是上述解決方案實現的簡化提取。 用於inQueues隊列: queue.join()
for p in processes:
p.join()
print "At the end output has: " + str(out_queue.qsize()) + " records"
with open("results.csv", "w") as out_file:
out_file.write("Algorithm,result\n")
while not out_queue.empty():
res = out_queue.get()
out_file.write(res['algorithm'] + ","+res['result']+"\n")
out_queue.task_done()
time.sleep(0.05)
out_queue.join()
out_file.close()
的out_queue.qsize()將打印過量的500個記錄可用,但是隻有100將被打印到該文件。 同樣在這一點上,如果500條記錄是系統生成的總數,我不能100%確定,但只是此時報告的數字。
如何確保將所有結果寫入results.csv文件?
[QSIZE()](http://bugs.python.org/issue17985):「返回隊列的近似大小由於。多線程/多處理語義, 是不可靠的。「 – kay
我知道,由qsize方法指示的隊列大小可能會發生變化,但代碼段是整個程序中從隊列中刪除的唯一部分,因此預計打印的記錄數不會小於隊列的大小(這是當前發生的)。 – kyleED