【问题标题】:Windows Task Manager: Python app memory usage increaseWindows 任务管理器:Python 应用程序内存使用量增加
【发布时间】:2016-04-07 13:54:18
【问题描述】:

我使用 Python 3.4 和 Tkinter 制作了一个应用程序。 我的应用程序运行多个 (3-5) 线程,每个线程在下面执行。

  1. recvfrom() 无限循环从 socket(UDP) 获取消息
  2. 显示消息并将其写入文件的无限循环

我在基于 XP 的 Windows 嵌入式操作系统上使用我的应用程序, 我用 TaskManager 观察内存使用情况, 因为我想在不关机的情况下长时间(可能超过一个月)运行我的应用程序。

那么,问题来了

Mem Usage(physical) 逐渐增加,但有时会急剧减少。 所以总体看起来还不错。

但从长远来看,虚拟内存大小(VMSize)正在增加。 例如,当我启动应用程序时,VMSize 为 26MB。 第二天,它变成了29MB, 第二天,它变成了 32MB。 它有时会增加一点,有时会减少一点(例如 20KB)。 但总体呈上升趋势。 这不是那么大的音量,但“增加”让我感到不安。

我希望 GarbageCollection 会有所帮助,所以我在我的代码中插入了 gc.collect(), 这样它将每 3 小时调用一次。 但是什么都没有改变,并且 print(gc.collect()) 总是显示为 0(除了在应用程序本身启动之后)。

这是内存泄漏吗?

我阅读了 del() 的定义,引用循环会导致 Python 中的内存泄漏, 但我从不自己定义 del()。

提前谢谢你。

【问题讨论】:

    标签: python sockets memory-leaks tkinter


    【解决方案1】:

    我自己发现了原因,所以在这里写下并关闭问题。

    内存泄漏的原因是我从多个线程调用 tkinter 函数。 tkinter 不是线程安全的,所以我违反了它的规则。

    我修改了我的程序,以便只有主线程使用 tkinter 函数 内存泄漏已消失。

    谢谢。

    【讨论】:

      猜你喜欢
      • 2013-02-24
      • 2014-03-19
      • 2017-05-25
      • 2013-08-07
      • 2010-09-17
      • 1970-01-01
      • 1970-01-01
      • 2022-01-11
      • 1970-01-01
      相关资源
      最近更新 更多