2017-06-19 29 views
0

我一直在閱讀關於Python的「多處理」,特別是「Pool」的東西。我熟悉線程,但不熟悉這裏使用的方法。如果我要將一個非常大的集合(比如說某種類型的字典)傳遞給進程池(「pool.map(myMethod,humungousDictionary)」)是由字典在內存中創建的副本,並傳遞給每個進程,或者那裏只存在一個字典嗎?我關心內存使用情況。先謝謝你。關於Python中multiprocessing.pool內存使用的困惑

+0

不知道爲什麼你要通過字典中的映射方法,但該詞典將被強制轉換爲鍵的迭代和密鑰的一部分將被傳遞到每個子。 – newtover

+0

這是一個人爲的例子。我只想說明多個進程試圖處理大型數據集的情況。這實際上是一個數字應用程序,所以這個例子可能是由一個非常大的numPy數組或類似的東西給出的。我只是擔心,數據集將在每個需要訪問它的進程中重複。 – LKeene

回答

1

簡短的回答是:。進程在其獨立的內存空間中工作,有效地複製數據。

如果你的字典是隻讀的,並且修改將不會進行,這裏有一些選擇,你可以考慮:

  1. 保存數據到數據庫中。每個工作人員將讀取數據並獨立工作
  2. 使用os.fork與一位產生多個工人的父代進行單個進程。因此,所有線程共享相同的上下文。
  3. 使用共享內存。 Unix系統爲進程間通信提供共享內存。如果有機會參賽,你也需要信號燈。

您也可以考慮參考here以深入瞭解可能的解決方案。

+0

謝謝Coldspeed。可以在Windows(和MacOSX)上使用共享內存嗎? – LKeene

+0

@Leeee你可能想看看這個:https://docs.python.org/2/library/mmap.html ...希望跨平臺。 –