2012-04-11 147 views
0

我有一個代碼,我想多次處理(多處理),並且多個進程中的每個進程的輸出都應該存儲在一個公用內存中,然後進行相應的處理。Python中的多處理/多線程..?

每個單獨的進程都執行一段代碼(維護一個字典),並且每個進程應該將數據存儲在一個公共內存中(並排或不可能,然後將所有字典存儲在最後一次。)

對於.eg

process1 -> dict1, 
process2 -> dict2, 
process3 -> dict3 

>main_dict = dict1 + dict2 + dict3 

我執行這段代碼在Python。

我也可以在這裏做多線程,但多線程並不像我所聽說的那麼平行......所以我可以去做多處理。請告訴我過程,在多處理器模式保持這種情景不會浪費到太多的時間和離開處理器理想..

感謝

回答

0

看那subprocess模塊。

在文檔中有很多例子,你可以用它做什麼。
最終這可以幫助你解決你的問題...

+0

子進程更適合啓動外部命令,OP似乎使用python代碼。 – 2012-04-11 17:35:21

+0

我認爲最簡單/最好的方法仍然是使用多線程... – evotopid 2012-04-11 17:40:19

+0

-1。呼應塞德里克朱利安。 – 2012-04-11 19:16:55

6

你會想看看multiprocessing模塊,雖然我不認爲你可以用Python中的字典做共享內存 - 我認爲你將需要序列化它們並通過隊列發送它們。

多線程是不那麼平行居然我也聽說過。所以我可以去多。請告訴我過程,以維持這種在多模式方案的不浪費到太多的時間和離開處理器理想..

如果你不想離開處理器那麼你就不除非你有IO限制,否則會得到任何額外的並行性。

這也就意味着,如果你正在做一個巨大的CPU的工作量,然後停留在同一處理器上做多處理只會減慢你的速度。增加並行性的唯一方法是去其他處理器。 (即使它們是「虛擬」超線程CPU)。

另一方面,如果通過從內存或網絡中讀取內容(看起來並非如此)來減緩速度,則threading模塊會更合理。但它並不會增加您的CPU並行度,因爲這是因爲GIL

簡而言之:您要求的是矛盾的事情。找出你真正需要的東西,然後選擇一種方法。