我正在製作一個程序,它讀取多個文件並將每個文件的摘要寫入輸出文件。輸出文件的大小相當大,因此將它保存在內存中不是一個好主意。我正在嘗試開發一種多處理方式。到目前爲止,我能夠使用的最簡單的方法是:多處理imap_unordered在python
pool = Pool(processes=4)
it = pool.imap_unordered(do, glob.iglob(aglob))
for summary in it:
writer.writerows(summary)
do是彙總文件的函數。作家是一個csv.writer對象
但事實是,我仍然不明白multiprocessing.imap完全。這是否意味着4個摘要是並行計算的,並且當我讀取其中的一個時,第5個開始計算?
有沒有更好的方法來做到這一點?
謝謝。
」組塊可降低酸洗和取消結果對象的開銷。「 - 那麼爲什麼不做'chunksize = len(iterable)/進程數量?什麼是折衷? – 2012-08-24 16:34:30
@AdamParkin每個項目可能不會被處理器以相同的速度處理,您希望有一堆「準備好分派」項目來填充等待中的處理器。 – Zenon 2012-10-18 03:38:51
嗯,我想你應該有'max(3 * nproc,len(it))'作業,然後。意思是'chunksize = len(it)/ max(3 * nproc,len(it))'。還是有很好的啓發式? – 2015-10-23 11:15:49