为了账号安全,请及时绑定邮箱和手机立即绑定

推荐哪种Python内存分析器?

推荐哪种Python内存分析器?

慕容708150 2019-06-06 14:47:55
推荐哪种Python内存分析器?我想知道Python应用程序的内存使用情况,特别是想知道哪些代码块/部分或对象占用了大部分内存。谷歌搜索显示商业搜索是Python内存校验器(仅限窗户)。而开源的是化油器和海皮.我没有试过任何人,所以我想知道哪一个是最好的考虑:给出了大部分细节。我必须对我的代码做最少的或不做的更改。
查看完整描述

3 回答

?
宝慕林4294392

TA贡献2021条经验 获得超8个赞

海皮使用起来很简单。在代码中的某个时候,您必须编写以下内容:

from guppy import hpy
h = hpy()print h.heap()

这提供了如下一些输出:

Partition of a set of 132527 objects. Total size = 8301532 bytes.Index  Count   %     Size   % Cumulative  
% Kind (class / dict of class)0  35144  27  2140412  26   2140412  26 str1  38397  29  1309020  16   
3449432  42 tuple2    530   0   739856   9   4189288  50 dict (no owner)

您还可以从引用对象的位置找到数据,并获得相关的统计信息,但不知怎的,文档上的文档有点稀疏。

还有一个用Tk编写的图形浏览器。


查看完整回答
反对 回复 2019-06-06
?
紫衣仙女

TA贡献1839条经验 获得超15个赞

既然没人提过,我就指着我的模块记忆剖面仪它能够打印内存使用情况的逐行报告,并能在Unix和Windows上工作(需要在最后一次打印psutil)。输出不是很详细,但目标是概述代码在何处消耗更多的内存,而不是对分配的对象进行详尽的分析。

在用@profile并使用-m memory_profiler标记它将打印如下逐行报告:

Line #    Mem usage  Increment   Line Contents==============================================
     3                           @profile
     4      5.97 MB    0.00 MB   def my_func():
     5     13.61 MB    7.64 MB       a = [1] * (10 ** 6)
     6    166.20 MB  152.59 MB       b = [2] * (2 * 10 ** 7)
     7     13.61 MB -152.59 MB       del b     8     13.61 MB    0.00 MB       return a


查看完整回答
反对 回复 2019-06-06
?
开心每一天1111

TA贡献1836条经验 获得超13个赞

我建议唐瑟..它非常容易设置,并且您需要对代码进行零更改。您可以通过时间查看每种类型的对象的计数,查看活动对象的视图列表,查看对活动对象的引用,所有这些都来自简单的web接口。

# memdebug.pyimport cherrypyimport dowserdef start(port):
    cherrypy.tree.mount(dowser.Root())
    cherrypy.config.update({
        'environment': 'embedded',
        'server.socket_port': port    })
    cherrypy.server.quickstart()
    cherrypy.engine.start(blocking=False)

您导入membug,并调用mem调试器。就这样。

我还没试过PySizer或者Heapy。我会感谢其他人的评论。

更新

以上代码用于CherryPy 2.XCherryPy 3.X这个server.quickstart方法已被删除,并且engine.start不采取blocking旗子。所以如果你用CherryPy 3.X

# memdebug.pyimport cherrypyimport dowserdef start(port):
    cherrypy.tree.mount(dowser.Root())
    cherrypy.config.update({
        'environment': 'embedded',
        'server.socket_port': port    })
    cherrypy.engine.start()


查看完整回答
反对 回复 2019-06-06
  • 3 回答
  • 0 关注
  • 599 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信