我还没有找到一种好的方法来使用multiprocessing
监控Python脚本的内存使用情况。更具体地说,假设我这样做:
import time
biglist = range(pow(10, 7))
time.sleep(5)
根据/usr/bin/time -v
和top
的测量,内存使用量为1.3 GB。但现在,假设我这样做:
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 脚本的内存使用情况?