我有一个我想要应用于大量项目的功能。返回时,结果将插入到字典中。该函数涉及引用从未被函数更改的两个字典,但需要由池中的所有进程访问。
我当前的代码(如下)有效,但确实会耗尽内存使用量。
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) - 如何使它们共享'共享'所有流程之间?也许重要的是,我只需要对它们进行读访问,因此不关心并发/锁。