首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >psutil的奇怪行为

psutil的奇怪行为
EN

Stack Overflow用户
提问于 2015-06-13 13:29:36
回答 1查看 249关注 0票数 0

我正在为python2.7使用库psutil。

考虑一下这个小项目:

代码语言:javascript
复制
import os
import psutil

# return the memory usage in MB
process = psutil.Process(os.getpid())
print process.memory_info().rss / float(2 ** 20)

程序返回的内存信息总是不同的。我不明白我的应用程序为什么总是在执行相同的操作(在这里,几乎什么都不做),在每次执行时都不会有相同的内存占用。

示例(每一行都是不同的执行):

  • 10.37109375
  • 10.37109375
  • 10.359375
  • 10.41015625
  • 10.4140625
  • 10.30078125

我是不是漏掉了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-06-13 13:50:49

测量记忆占用就像在运动中拍摄某人的照片。ps实用程序并不总是看到与您的script+variables相同的大小,其中一些部件并不总是可见的。类被实例化,然后被销毁。变量被分配,然后再次释放。

如文档所述,“垃圾”收集器是动态类型化语言(如Python )常见的,它在某些时候运行,而这些时间并不总是与测量间隔同步的,因此您会看到变化。

令人担心的是,如果内存占用会持续增加,那么我们就会有一个内存“泄漏”(例如。如果有一个递归调用占用不断增加的资源,则可能发生这种情况)。

程序可预见的时间已经过去了(除非你为微控制器编写程序)。程序在多任务环境中运行,程序和操作系统持续(同时)争夺计算机资源。

但是现代程序,如PythonRubyPerl和其他程序,在每次执行时都不一样。它们受可用内存的影响(由于正在运行的其他程序而不同)。

请注意,这不是你要测试的5行程序。就坐process = psutil.Process(os.getpid())线吧。它调用os.getpid(),它调用操作系统的getpid()。结果会进入psutil.Process,它可能会调用几百行代码。最后,看似无辜的process =必须调用内存管理器来为process保留内存,然后将结果传输到那里.

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30819228

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档