在多处理池的所有进程之间共享字典(仅限访问)

时间:2017-12-19 19:39:01

标签: python dictionary parallel-processing multiprocessing

我有一个我想要应用于大量项目的功能。返回时,结果将插入到字典中。该函数涉及引用从未被函数更改的两个字典,但需要由池中的所有进程访问。

我当前的代码(如下)有效,但确实会耗尽内存使用量。

from multiprocessing import Process, Manager, Pool

# Global dictionaries that I want read only access to: g1
# psm is an array, g1[key] maps to an array 
def find_match(m):
    dist = abs(g1[m] - psm)
    # Sort:
    dist = dist.sort_values()
    # Take nearest match
    rv[m] = dist.iloc[:1].index.values

manager = Manager()
rv = manager.dict()
pool = Pool(processes=4)   
res = pool.map_async(find_match, g1.keys()).get(99999)

我的猜测是,为每个进程复制了函数引用的字典和列表(g1,psm) - 如何使它们共享'共享'所有流程之间?也许重要的是,我只需要对它们进行读访问,因此不关心并发/锁。

0 个答案:

没有答案