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
结果如下:
- 从5个进程到10个进程不会改变内存使用的峰值。这表明只报告父进程的内存使用峰值。但是80000KB似乎对于父进程来说太高了
- 从10^6个元素增加到10^7个元素会增加峰值内存使用量。这表明所有进程(父进程+N个子进程)的峰值内存都是可测量的。但是,峰值内存使用率不应该乘以10吗
我误解了什么?“峰值内存使用率不应该乘以10吗?”关于这一点:不。您需要记住,分叉进程即使没有大的数组,也会占用大量内存,所以您不太可能看到10倍的增长。如果不构造任何数组,您可能可以测试它需要多少内存。我相当确定您只测量父进程的大小(
man/usr/bin/time
根本没有提到子进程,因此我怀疑它是否有任何特殊的测量方法)。您可以在进程查看器中查看内存使用情况以进行检查,例如htop(按f5键可获得一个树视图,该树视图同时显示子进程和父进程)。该软件包适用于测量Python进程(包括多处理上下文中的子进程)的峰值内存。e、 g.作为CLI工具mprof运行--包括子项