在我的群集中,我只能使用20 Gb内存和230 Gb vmem。我编写了一个python脚本来调用执行文件(使用subprocess
)。每次调用(func
)花费大约0.5 Gb内存。我同时使用multiprocess
进行多方通话。简要代码如下:
import pathos.multiprocessing as mp
def func(i):
subprocess.call(['cp',exe_file, exe_file+str(i)])
p = subprocess.Popen(['./'+exe_file+str(i)], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
err = p.communicate()[1]
p.wait()
def fun_parallel(N):
p=mp.Pool(N)
p.map(func,range(100))
p.close()
p.join()
exe_file
是执行文件,N
是同时运行的func
的数量。 (我有很多线程,所以我可以设置N
等于16,32,64,......不需要考虑线程的限制)
我的问题很简单,
OSError: [Errno 12] Cannot allocate memory
我猜的原因是,对于N = 32,使用的存储器是32 * 0.5 = 16Gb,对于N = 64,使用的存储器是64 * 0.5 = 32Gb,高于存储器限制20Gb。
那么vmem的用途是什么?由于我有230 Gb vmem,它能做什么吗?
func
? (但我认为这不是一个好方法......)有没有什么好方法可以自动使用群集的各种潜力?