我有一個cpu密集的代碼,它使用重型字典作爲數據(大約250M數據)。我有一個多核處理器,並希望利用它,以便我一次可以運行多個任務。該字典大多是隻讀的,可能每天更新一次。
如何在不重複字典的情況下在python中編寫此代碼?
我知道python線程不使用本地線程,也不會提供真正的併發。我可以使用多處理模塊而不在進程之間序列化數據嗎?
我來自java世界,我的需求會像java線程那樣可以共享數據,在多個處理器上運行並提供同步原語。利用python中的多處理器共享數據
3
A
回答
1
您可以在進程間共享只讀數據,只需使用fork
(在Unix上;在Windows上不是簡單的方式),但是不會捕獲「每天一次更改」(您需要明確地爲每個進程更新自己的副本的方式)。像dict
這樣的本機Python結構只是沒有設計用於共享內存中的任意地址(你必須編寫一個支持C語言的dict
變體),所以它們不提供任何安慰。
您可以使用Jython(或IronPython)以與Java(或C#)完全相同的多線程功能獲得Python實現,包括多個併發線程的多處理器使用。
1
使用shelve
作爲字典。由於寫入很少,所以不應該存在共享它的問題。
0
看看stdlib中的這個: http://docs.python.org/library/multiprocessing.html 有一些很棒的功能可以讓你很容易地在進程間共享數據結構。
相關問題
- 1. Python,WSGI,多處理和共享數據
- 2. 多處理數據共享
- 3. 共享numpy數組的Python多處理
- 4. python多處理中的共享變量
- 5. Python多處理 - 數組共享?
- 6. 在多處理器中共享Python對象:值或管理器
- 7. python在多處理中共享dict()中共享隊列()
- 8. 使用Python多重處理更新共享只讀數據
- 9. 在Python中使用多處理的對象的共享數組
- 10. 具有共享數據的Python多處理池
- 11. python多處理器管理器和複合模式共享
- 12. Python多處理 - 共享內存
- 13. Python多處理和共享變量
- 14. 多處理 - 共享陣列
- 15. 多處理中的共享內存
- 16. 多處理共享對象中的共享對象
- 17. 如何將實時處理的數據從C#共享到python
- 18. 芹菜工和共享列表使用python的多處理
- 19. 在python多重處理中共享更復雜的對象
- 20. 在內存中的Python多處理共享文件
- 21. python多處理,做進程共享一個公共變量?
- 22. Python的共享並行處理
- 23. python多處理:共享比特數組(bitarray 0.8.1)
- 24. python多處理器管理器 - 共享列表 - 連接重置對等104
- 25. 與多個python程序共享數據
- 26. 使用python多重處理功能共享一個信號燈
- 27. 保護多處理器中的共享內存區域
- 28. 在多處理中使用共享數組來保存值
- 29. Python的多處理和共享numpy的陣列
- 30. 跨多個數據處理程序共享Oracle連接
從文檔看來,值提取將使用pickle返回數據的副本?對我來說一個任務通常訪問字典的1/3,這將意味着在這種方法中大量的臨時對象 – TigrisC 2010-01-26 01:05:58
然後,對於您的問題,CPython沒有好的解決方案。只有一系列不太可怕的,都涉及某種數據庫。 – 2010-01-26 01:11:43