用于大型只读存储的 Python 多处理管理器字典的替代方案



我正在使用进程使用的大型(~5G)只读字典的多处理。我首先将整个字典传递给每个进程,但遇到了内存限制,因此更改为使用多处理管理器字典(阅读此如何在python中的多个进程之间共享字典而不锁定)

自更改以来,性能有所下降。对于更快的共享数据存储,有哪些替代方案? 字典有一个 40 个字符的字符串键和 2 个小字符串元素元组数据。

使用内存映射文件。虽然这听起来可能很疯狂(性能方面),但如果您使用一些聪明的技巧,则可能并非如此:

  1. 对键进行排序,以便可以在文件中使用二进制搜索来查找记录
  2. 尝试使文件的每一行长度相同("固定宽度记录")

如果不能使用固定宽度的记录,请使用以下伪代码:

Read 1KB in the middle (or enough to be sure the longest line fits *twice*)
Find the first new line character
Find the next new line character
Get a line as a substring between the two positions
Check the key (first 40 bytes)
If the key is too big, repeat with a 1KB block in the first half of the search range, else in the upper half of the search range

如果性能不够好,请考虑用 C 编写扩展。

最新更新