4

我有一个程序,它需要一个非常大的输入文件并从中制作一个字典。由于无法将其放入内存中,因此我决定使用搁置将其写入磁盘。现在我需要利用系统中可用的多个内核(其中 8 个),以便加快解析速度。我认为最明显的方法是将我的输入文件分成 8 个部分并同时在所有 8 个部分上运行代码。问题是我最后只需要一本字典。不是8个。那么如何使用搁置来并行更新一个字典呢?

4

2 回答 2

8

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

不要试图弄清楚如何让多个进程同时写入搁置。考虑一下如何让单个流程将结果交付搁置。

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

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

于 2012-07-15T17:29:06.357 回答
6

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

  1. 每个过程制作一个架子,然后在最后合并。

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

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

于 2012-07-15T17:07:49.587 回答