在python中并行更新搁置字典

Ami*_*ash 4 python parallel-processing shelve multiprocessing

我有一个程序,它需要一个非常庞大的输入文件,并从中产生一个字典.由于这不适合内存,我决定使用shelve将其写入我的磁盘.现在我需要利用我的系统中的多个核心(其中8个),这样我就可以加快解析速度.我认为最明显的方法是将输入文件分成8个部分,同时在所有8个部分上运行代码.问题是我最后只需要一本字典.不是8个.那么如何使用shelve并行更新单个字典呢?

jdi*_*jdi 7

在这里给出了一个非常详细的答案,处理来自python中多个进程的单个文件

不要试图弄清楚如何让多个进程一次写入搁架.想想你如何让一个过程将结果传递到货架上.

这个想法是你有一个进程产生队列的输入.然后,您可以拥有尽可能多的工作人员来接收排队的项目并完成工作.完成后,他们将结果放入结果队列中以便读取接收器.好处是您不必提前手动拆分工作.只需生成"输入",让任何工作人员阅读并接受它.

使用此模式,您可以根据系统功能放大或缩小工作人员.


Dou*_*gal 6

shelve 不支持并发访问.有几个选项可以完成你想要的:

  1. 每个进程创建一个架子,然后在最后合并.

  2. 让工作进程将结果发送回主进程,例如multiprocessing.Pipe; 然后,主人将它们存放在货架上.

  3. 我认为你可以让bsddb在类似搁置的API中使用并发访问,但我从来没有必要这样做.