什么';vmem的用途是什么?我可以在python中使用vmem吗?

什么';vmem的用途是什么?我可以在python中使用vmem吗?,python,linux,python-2.7,memory,Python,Linux,Python 2.7,Memory,在我的集群中,我只能使用20 Gb内存和230 Gb vmem。我编写了一个python脚本来调用执行文件(使用子流程)。每次调用(func)都会占用大约0.5 Gb的内存。我使用multiprocess同时进行多个调用。作为说明的简要代码如下: import pathos.multiprocessing as mp def func(i): subprocess.call(['cp',exe_file, exe_file+str(i)]) p = subprocess.Pop

在我的集群中,我只能使用20 Gb内存和230 Gb vmem。我编写了一个python脚本来调用执行文件(使用
子流程
)。每次调用(
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_文件
是执行文件,
N
是同时运行的
func
的编号。(我有很多线程,所以我可以设置<代码> n<代码>等于16, 32, 64,…不必考虑线程的限制)

我的问题很简单,

  • 当我设置N=32时,它运行良好,当我设置N=64时,它中断
  • OSError:[Errno 12]无法分配内存

    我猜原因是,对于N=32,使用的内存是32*0.5=16Gb,对于N=64,使用的内存是64*0.5=32Gb,这高于内存限制20GB

    那么vmem有什么用呢?既然我有230 Gb的vmem,它能做些什么吗

  • 我可以在python代码中避免这个问题吗?例如,当内存几乎用完时,停止调用
    func
    ?(但我认为这不是一个好方法…)有没有什么好方法可以自动利用集群的每一个潜力

  • 虚拟内存不是真实内存。运行子进程需要实际内存。@IgnacioVazquez Abrams谢谢,有没有办法使用vmem?我应该使用操作系统吗?使用vmem会显著降低速度吗?虚拟内存不是真实内存。运行子进程需要实际内存。@IgnacioVazquez Abrams谢谢,有没有办法使用vmem?我应该使用操作系统吗?使用vmem会显著降低速度吗?