我有一個程序,需要一個非常大的輸入文件,並從中作出一個字典。由於這種方式不適合內存,我決定使用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. 更新寫在文件上的擱置字典
- 2. 在Python中更新字典
- 3. 在Python中更新字典
- 4. python擱置dbm.error?
- 5. Python字典更新自定義字典
- 6. 將新密鑰添加到字典與擱置
- 7. python字典更新方法
- 8. Python更新數組字典
- 9. Python字典值更新
- 10. Python字典沒有更新
- 11. 更新python字典值
- 12. 無法更新python中的字典
- 13. 在python中更新我的字典
- 14. 更新方法字典的Python
- 15. 的Python - 字典文件沒有更新
- 16. Python中的自定義擱置實現
- 17. Python擱置模塊問題
- 18. 在Python中更新詞典詞典
- 19. 更新了一個Python輸入字典
- 20. Pickle字典不更新 - Python 3.4
- 21. 字典更新方法。 Python 3.4
- 22. Python字典問題更新值
- 23. Python MySQLdb更新列表字典
- 24. 恢復IntelliJ Idea擱置新項目中的更改
- 25. 字典Python3。更新字典的價值
- 26. 更新字典值的字典
- 27. 擱置無法擱架
- 28. Python字典鍵來新字典
- 29. syntax_error:更新字典
- 30. 更新字典值
我推薦選項2.它很容易忘記同時寫入擱置並讓一個作者從隊列中接受。所有工作人員解析並添加到隊列中。 「生產者 - 工人匯」 – jdi 2012-07-15 17:18:28