我有一個程序,需要一個非常大的輸入文件,並從中作出一個字典。由於這種方式不適合內存,我決定使用shelve將其寫入我的磁盤。現在我需要利用我係統中可用的多個內核(其中8個),以便加速解析。我想過的最明顯的方法是將我的輸入文件分成8個部分,並同時在所有8個部分上運行代碼。問題是我最終只需要1個字典。不是其中8個。那麼我該如何使用shelve來並行地更新一個字典呢?更新Python中的擱置字典
3
A
回答
4
我介紹了Processing single file from multiple processes in python
一個相當詳細的解答here不要試圖找出你都可以有很多方法寫一個貨架一次。考慮如何讓一個流程將結果交付給貨架。
這個想法是,你有一個單一的過程產生輸入到queue。然後,你有儘可能多的工人,你想收到排隊的物品和工作。完成後,他們將結果放入結果隊列中供接收器讀取。好處是您不必提前手動分配工作。只要產生「輸入」,讓任何工作人員閱讀並使用它。
使用此模式,可以根據系統功能向上或向下擴展工作人員。
4
shelve
doesn't support concurrent access。有幾個選項可以完成你想要的功能:
爲每個進程創建一個架子,然後在最後合併。
讓工作進程通過例如
multiprocessing.Pipe
將結果發送回主進程;主人然後將它們存儲在架子上。我認爲你可以得到bsddb在類似shelve的API中同時訪問,但我從來沒有這樣做過。
相關問題
- 1. 擱置,Python和更新字典
- 2. 擱置對象和python字典
- 3. 更新寫在文件上的擱置字典
- 4. 在Python中更新字典
- 5. 在Python中更新字典
- 6. 在Python中更新字典
- 7. 在Python中更新字典
- 8. python擱置dbm.error?
- 9. Python更新字典到字典
- 10. Python字典更新自定義字典
- 11. 將新密鑰添加到字典與擱置
- 12. Python更新數組字典
- 13. Python字典沒有更新
- 14. python字典更新方法
- 15. Python字典沒有更新
- 16. 更新python字典值
- 17. Python字典值更新
- 18. 無法更新python中的字典
- 19. 批量更新Python中的PostgreSQL字典
- 20. 在python中更新我的字典
- 21. 在Python中更新和清除字典
- 22. TortoiseHg擱置更新unshelve快捷方式
- 23. Python的 - 更新字典的for循環
- 24. 在Python中更新一個字典與另一個字典
- 25. Python中的自定義擱置實現
- 26. 更新方法字典的Python
- 27. Python的字典更新和追加
- 28. 的Python - 字典文件沒有更新
- 29. Python擱置模塊問題
- 30. 在Python中更新詞典詞典
我推薦選項2.它很容易忘記同時寫入擱置並讓一個作者從隊列中接受。所有工作人員解析並添加到隊列中。 「生產者 - 工人匯」 – jdi 2012-07-15 17:18:28