繁体   English   中英

Python多处理-如何监视内存使用情况?

[英]Python multiprocessing - How to monitor the memory usage?

我还没有找到一种使用multiprocessing来监视Python脚本的内存使用的好方法。 更具体地说,说我这样做:

import time

biglist = range(pow(10, 7))
time.sleep(5)

内存使用量为1.3 GB,由/usr/bin/time -vtop衡量。 但是现在,说我这样做:

import time
from multiprocessing import Pool

def worker(x):
    biglist = range(pow(10, 7))
    time.sleep(5)
    return

Pool(5).map(worker, range(5))

现在top报告5 x 1.3 GB,这是正确的。 但是/usr/bin/time -v仍然报告1.3 GB,这没有意义。 如果要测量父进程的消耗,则应说为0。如果要测量父进程和子进程,则应报告为5 x 1.3 GB。 为什么说1.3 GB? 现在让我们尝试写时复制:

import time
from multiprocessing import Pool

biglist = range(pow(10, 7))

def worker(x):
    time.sleep(5)
    return

Pool(5).map(worker, range(5))

现在/usr/bin/time -v报告1.3 GB(再次),这是正确的。 但是top报告为6 x 1.3 GB,这是不正确的。 使用写时复制,它只能报告1.3 GB。

如何使用multiprocessing可靠地监视Python脚本的内存使用情况?

这实际上取决于“可靠”的含义。 您可能需要使用pmap <pid>命令来获取有关进程的内存使用情况的统计信息(我想您对total字段感兴趣)。 您需要跟踪在程序执行期间创建的所有进程(我想ps --forest在这里可能会为您提供帮助)。

如果要获取详细信息,则可能需要使用/proc/[pid]/{smaps,status,maps}手册页 )。

还请记住关于RSS和VSZ之间的区别。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM