同时查找字典的最佳方法是什么?

时间:2014-02-16 20:42:36

标签: python multithreading dictionary multiprocessing

对不起,如果这个问题对你来说太过火了。我参加了编程课程,但从未参加过计算机体系结构课程。我不得不向Wiki / SO / Google学习。

我有一个名为dict的{​​{1}},我需要并行查找(READ-ONLY)。我有一个LUT list个,我分散到多个线程/进程,然后每个线程/进程将查找item中各个LUT[item]的相应切片 - 列表。

我只能想到7个选项来实现这个目标:

item1模块,所有线程都查找相同的multithreading

dict2模块,所有进程都查找相同的multiprocessing

dict3模块,所有进程都会查找自己的multiprocessing副本,例如如果有2个进程,则有dict

的2个副本

dict4模块,所有进程都查找“共享代理字典”:multiprocessing

以下3个选项使用Manager.dict,因为我听说它可以用来克服Python的GIL。

Cython。 Cython& C ++的STL 5unordered_map,所有线程都查找相同的multithreading

unordered_map。 Cython& C ++的STL 6unordered_map,所有进程都查找相同的multiprocessing

unordered_map。 Cython& C ++的STL 7unordered_map,所有进程都会查找multiprocessing

的相应副本

我已经尝试过选项unordered_map2, 3, & 4比串行查找慢约100-1000倍。选项2 & 4运行良好,但其内存使用率过高,因为它使用了字典的多个副本。

选项3使用5, 6, & 7及其使用C ++的STL Cython进行扩展的能力,这是C ++ - 相当于Python的unordered_map。选项dict在技术上应该克服Python的GIL,但我想知道多线程是否真的可以解决受CPU限制的问题。我最好的选择是什么?

0 个答案:

没有答案