2010-04-24 69 views
4

我正在嘗試使用python獲取某些性能,這些任務可以使用http://docs.python.org/library/multiprocessing高度並行化。如何爲大型數據集中的python多處理選擇塊大小

當看着他們的庫時,他們說使用塊大小來處理很長的迭代。現在,我的迭代並不長,其中包含的一個字節是巨大的:〜100000條目,其中元組作爲鍵和數組的numpy值。

我該如何設置chunksize來處理這個問題,以及如何快速傳輸這些數據?

謝謝。

回答

2

一次處理多個工作人員處理這個單個大件物品的唯一方法是將其拆分。 multiprocessing的工作方式是將工作分爲單位,但最小的單位是一個對象 - 它無法知道如何以合理的方式分割單個對象。相反,你必須自己做。而不是發送需要處理的指令,將指令分成較小的工作單元,然後將這些指令發送出去。如果因爲所有的數據都是相互依賴的,所以你不能拆分字典,那麼你也不能真正分離工作。

+0

阿好吧有道理。目前,工作人員每個人都抓住巨大的字典,製作一份副本,修改它,然後發回他們的版本。 (不完全重量輕)。因爲你認爲那個知道他的python多重處理的人:如果巨人在哪裏只能讀取,是否有辦法讓所有工作人員有效地訪問其數據? (這對於線程來說很容易,但是對於多處理,看起來好像很難處理) – Sandro 2010-04-24 21:59:53

+0

如果你不在Windows上,並且在產生工作人員之前將這個「只讀」字典作爲進程的一部分,將其存儲在(例如)全球或封閉的本地,所有工作人員都可以訪問它,而不會受到序列化成本的影響。 – 2010-04-24 22:26:30

+0

呃哦,我現在才意識到我使用了錯誤的術語。我實際上使用Pool.map_async()函數來完成所有這些。我是否有權假定,通過使用映射,沒有解決方案,只能通過分叉。重新加入一起會產生嚴重的成本嗎? – Sandro 2010-04-24 23:27:26