Python 测量多处理的峰值内存使用率-令人困惑的结果

Python 测量多处理的峰值内存使用率-令人困惑的结果,python,bash,python-2.7,multiprocessing,python-multiprocessing,Python,Bash,Python 2.7,Multiprocessing,Python Multiprocessing,我写道: from multiprocessing import Pool import time import numpy.random as nr def f(vec_size): """Create a big vector and wait""" x = nr.randint(0, pow(10, 10), vec_size) time.sleep(10) n_proc = 5 vec_size = pow(10, 6) pool = Pool(n_proc) for

我写道:

from multiprocessing import Pool
import time

import numpy.random as nr

def f(vec_size):
  """Create a big vector and wait"""
  x = nr.randint(0, pow(10, 10), vec_size)
  time.sleep(10)

n_proc = 5
vec_size = pow(10, 6)
pool = Pool(n_proc)
for _ in pool.imap_unordered(f, [vec_size] * n_proc):
  pass
然后我检查了峰值内存使用量(“平均驻留集大小”),如下所示:

/usr/bin/time -v python run.py
结果如下:

  • n_proc=5,vec_size=10^6,峰值内存=80000 kb
  • n_proc=10,vec_size=10^6,峰值内存=80000 kb
  • n_proc=5,vec_size=10^7,峰值内存=360000 kb
  • n_proc=10,vec_size=10^7,峰值内存=360000 kb
  • 我的理解是,父进程不创建任何数据,[n_proc]子进程创建大向量。但是:

    • 从5个进程到10个进程不会改变内存使用的峰值。这表明只报告父进程的内存使用峰值。但是80000KB似乎对于父进程来说太高了

    • 从10^6个元素增加到10^7个元素会增加峰值内存使用量。这表明所有进程(父进程+N个子进程)的峰值内存都是可测量的。但是,峰值内存使用率不应该乘以10吗

    我误解了什么?

    “峰值内存使用率不应该乘以10吗?”关于这一点:不。您需要记住,分叉进程即使没有大的数组,也会占用大量内存,所以您不太可能看到10倍的增长。如果不构造任何数组,您可能可以测试它需要多少内存。我相当确定您只测量父进程的大小(
    man/usr/bin/time
    根本没有提到子进程,因此我怀疑它是否有任何特殊的测量方法)。您可以在进程查看器中查看内存使用情况以进行检查,例如htop(按f5键可获得一个树视图,该树视图同时显示子进程和父进程)。该软件包适用于测量Python进程(包括多处理上下文中的子进程)的峰值内存。e、 g.作为CLI工具
    mprof运行--包括子项