Python内存泄漏

我有一个长时间运行的脚本,如果运行时间足够长,将会占用系统上的所有内存。

没有详细说明剧本,我有两个问题:

  • 是否有任何“最佳实践”要遵循,这将有助于防止泄漏发生?
  • 有什么技术来调试Python中的内存泄漏?

  • 看看这篇文章:跟踪python内存泄漏

    另外,请注意垃圾收集模块实际上可以设置调试标志。 看看set_debug函数。 另外,请查看Gnibbler的这段代码来确定调用后创建的对象的类型。


    我尝试了以前提到的大多数选项,但发现这个小而直观的软件包是最好的:pympler

    跟踪未被垃圾收集的对象非常简单,请检查以下小例子:

    通过pip install pympler安装软件包

    from pympler.tracker import SummaryTracker
    tracker = SummaryTracker()
    
    # ... some code you want to investigate ...
    
    tracker.print_diff()
    

    输出显示所有已添加的对象,以及它们消耗的内存。

    示例输出:

                                     types |   # objects |   total size
    ====================================== | =========== | ============
                                      list |        1095 |    160.78 KB
                                       str |        1093 |     66.33 KB
                                       int |         120 |      2.81 KB
                                      dict |           3 |       840 B
          frame (codename: create_summary) |           1 |       560 B
              frame (codename: print_diff) |           1 |       480 B
    

    该软件包提供了许多更多功能。 检查pympler的文档,特别是识别内存泄漏部分。


    让我推荐mem_top工具,
    这帮助我解决了类似的问题。

    它立即显示了Python程序中内存泄漏的顶级嫌犯。

    链接地址: http://www.djcxy.com/p/18385.html

    上一篇: Python memory leaks

    下一篇: Which Python memory profiler is recommended?