如何在Python中使用多处理时节省内存?

hab*_*edi 7 python multiprocessing python-multiprocessing

我有一个函数,它将图形的节点id作为输入并在图形中计算某些东西(不改变图形对象),然后将结果保存在文件系统中,我的代码如下所示:

...
# graph file is being loaded
g = loadGraph(gfile='data/graph.txt')
# list of nodeids is being loaded
nodeids = loadSeeds(sfile='data/seeds.txt')

import multiprocessing as mp
# parallel part of the code
print ("entering the parallel part ..")
num_workers = mp.cpu_count() # 4 on my machine
p = mp.Pool(num_workers)
# _myParallelFunction(nodeid) {calculate something for nodeid in g and save it into a file}
p.map(_myParallelFunction, nodeids)
p.close()
...
Run Code Online (Sandbox Code Playgroud)

问题是当我将图形加载到Python中时需要大量内存(大约2G,它实际上是一个包含数千个节点的大图),但是当它开始进入代码的并行部分时(并行映射函数执行)似乎每个进程都有一个单独的g副本,我只是在我的机器上耗尽了内存(它有6G内存和3G交换),所以我想看到有一种方法可以为每个进程提供相同的副本g这样只需要存储器来容纳它的一个副本吗?任何建议都表示赞赏,并提前感谢.

Aer*_*aux 1

如果将图分成更小的部分不起作用,您也许可以使用multiprocessing.sharedctypes找到解决方案,具体取决于您的图是什么类型的对象。