python睡眠对于内存消耗测量不准确

时间:2015-04-07 12:19:57

标签: python while-loop sleep

我有一个python脚本(runner.py),它定期测量进程的内存消耗。监视内存消耗我使用一个名为ProcessTimer.py的辅助类。 processtimer是根据给定here的解决方案实现的。

解决方案基于轮询。所以有一个while - 循环。在这个while中,测量循环内存消耗,然后线程休眠一段时间以确保定期测量。在我的情况下,睡眠完成500毫秒。但是,我的问题是每500毫秒没有进行测量。测量之间的时间似乎是任意的,我不知道为什么每500毫秒没有完成(根据time.sleep(.500))。

在这里,您可以看到我测量的CSV输出。第一列是时间(以秒为单位),第二列是内存消耗:

time,rss_mem
0.0,12.38
1.1,101.89
2.3,110.74
3.4,110.79
4.5,113.61
5.7,101.6
6.8,102.44
8.0,104.28
9.1,104.48
10.3,108.13
11.4,102.64
12.6,102.83
13.7,102.86
14.9,102.86

正如您所看到的,即使while - 循环(用于测量另一个进程的内存消耗)每隔500毫秒执行一次,每次测量之间总会有~1.1秒。那是为什么?

可以看到runner.py的相关代码here。 可以看到辅助类ProcessTimer.py here

1 个答案:

答案 0 :(得分:2)

time.sleep(.5)并不确保你的循环每秒执行两次;它只是睡了半秒钟。如果代码的其余部分需要1秒钟来执行,则每次迭代将花费.5 + 1 = 1.5秒。

如果您想以更精确的间隔进行衡量,则需要衡量调用ptimer.poll()所需的时间,然后从.5秒中减去此值。

但是从上面的数据来看,似乎ptimer.poll()需要花费大量时间。您可能必须首先优化内存测量代码,以便能够以您想要的速度进行测量。