python sleep for memory consumption measurement not accurate(用于内存消耗测量的Python休眠不准确)
本文介绍了用于内存消耗测量的Python休眠不准确的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有一个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
如您所见,每次测量之间总是有大约1.1秒的间隔,即使while循环(用于测量另一个进程的内存消耗)应该每隔500ms执行一次。为什么会这样?
runner.py的相关代码见here。 可以看到帮助器类ProcessTimer.pyhere。
推荐答案
time.sleep(.5)不确保您的循环每秒执行两次;它只休眠半秒。如果代码的其余部分执行需要1秒,则每次迭代将花费0.5+1=1.5秒。
如果要以更精确的时间间隔进行测量,则需要测量调用ptimer.poll()所需的时间,然后从0.5秒中减去该时间。
ptimer.poll()似乎需要相当长的时间。您可能必须首先优化内存度量代码,才能以所需的速度进行度量。
这篇关于用于内存消耗测量的Python休眠不准确的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
编程基础网
本文标题为:用于内存消耗测量的Python休眠不准确
基础教程推荐
猜你喜欢
- Discord.py 缺少必需的参数 2022-01-01
- pyserial - 可以从线程 a 写入串行端口,是否阻塞从线程 b 读取? 2022-01-01
- numpy float:比算术运算中内置的慢 10 倍? 2022-01-01
- 与常规 dict 相比,Python manager.dict() 非常慢 2022-01-01
- 将 x 轴刻度更改为自定义字符串 2022-01-01
- 用 Python 编写 Fortran 无格式文件 2022-01-01
- 在 Celery 工作人员中捕获 Heroku SIGTERM 以优雅地关 2022-01-01
- 尝试制作WhatsApp机器人 2022-01-01
- 由Python将MP3转换为MIDI(类型错误:无法加载插件:mtg-Melodia:Melodia) 2022-01-01
- 使用生成器和迭代器时 Python 多循环失败 2022-01-01
