我一直在閱讀關於Python的「多處理」,特別是「Pool」的東西。我熟悉線程,但不熟悉這裏使用的方法。如果我要將一個非常大的集合(比如說某種類型的字典)傳遞給進程池(「pool.map(myMethod,humungousDictionary)」)是由字典在內存中創建的副本,並傳遞給每個進程,或者那裏只存在一個字典嗎?我關心內存使用情況。先謝謝你。關於Python中multiprocessing.pool內存使用的困惑
0
A
回答
1
簡短的回答是:否。進程在其獨立的內存空間中工作,有效地複製數據。
如果你的字典是隻讀的,並且修改將不會進行,這裏有一些選擇,你可以考慮:
- 保存數據到數據庫中。每個工作人員將讀取數據並獨立工作
- 使用
os.fork
與一位產生多個工人的父代進行單個進程。因此,所有線程共享相同的上下文。 - 使用共享內存。 Unix系統爲進程間通信提供共享內存。如果有機會參賽,你也需要信號燈。
您也可以考慮參考here以深入瞭解可能的解決方案。
+0
謝謝Coldspeed。可以在Windows(和MacOSX)上使用共享內存嗎? – LKeene
+0
@Leeee你可能想看看這個:https://docs.python.org/2/library/mmap.html ...希望跨平臺。 –
相關問題
- 1. 關於OpenGL內存管理的困惑
- 2. 關於內存的困惑使用Xcode,活動監視器的真實內存
- 3. 關於變量賦值(Python)的困惑
- 4. 關於python語法的困惑
- 5. 關於python遞歸函數的困惑
- 6. 關於Python SMTP客戶端的困惑
- 7. 關於MSBuild ItemGroup的內容困惑
- 8. 關於使用類的困惑
- 9. 關於使用realm.allObjects()的困惑
- 10. 關於使用索引的困惑
- 11. 關於保存到文件的困惑
- 12. 關於CPU高速緩存的困惑
- 13. Adboe AGAL關於寄存器的困惑
- 14. 德爾福 - 關於TDictionary中的內存分配困惑
- 15. Task.Factory.StartNew - 關於池的困惑
- 16. 關於MutationObserver的困惑
- 17. 關於objc_getClass的困惑
- 18. 關於DBus的困惑
- 19. 關於AverageTimer32 PerformanceCounter的困惑
- 20. 關於Thread.Join的困惑
- 21. 關於MusicService的困惑
- 22. 關於結構的困惑
- 23. 關於memset的困惑
- 24. 關於FTP的困惑
- 25. 關於Access Specifier的困惑
- 26. 關於線程的困惑
- 27. 關於Kleene星的困惑
- 28. 關於PhoneGap/Cordova的困惑
- 29. 關於MKOverlayView的困惑
- 30. 關於[NSDate date]的困惑
不知道爲什麼你要通過字典中的映射方法,但該詞典將被強制轉換爲鍵的迭代和密鑰的一部分將被傳遞到每個子。 – newtover
這是一個人爲的例子。我只想說明多個進程試圖處理大型數據集的情況。這實際上是一個數字應用程序,所以這個例子可能是由一個非常大的numPy數組或類似的東西給出的。我只是擔心,數據集將在每個需要訪問它的進程中重複。 – LKeene