Windows任务管理器:Python应用程序内存使用量增加

时间:2016-04-07 13:54:18

标签: python sockets memory-leaks tkinter

我使用Python 3.4和Tkinter创建了一个应用程序。 我的应用程序运行几个(3-5)线程,每个线程都在下面。

  1. 无限循环的recvfrom()从socket(UDP)获取消息
  2. 无限循环,显示消息并将其写入文件
  3. 我在基于XP的Windows嵌入式操作系统上使用我的应用程序, 我用TaskManager观察内存使用情况, 因为我想在不关机的情况下运行我的应用程序很长时间(可能超过一个月)。

    然后,问题是

    Mem用法(物理)逐渐增加,但有时会急剧减少。  所以整体看起来还不错。

    但虚拟内存大小(VMSize)随着长期观点的增加而增加。  例如,当我启动应用程序时,VMSize为26MB。  第二天,它变成29MB,  第二天,它变成了32MB。  它有时会增加一点,有时会减少一点(例如20KB)。  但总体而言,它呈上升趋势。  这个数量不是很大但是增加了#34;让我感到不安。

    我期望GarbageCollection可以提供帮助,所以我在我的代码中插入了gc.collect(), 这样它每3个小时就会被调用一次。 但没有任何改变,print(gc.collect())总是显示为0(除了启动应用程序本身之后)。

    这是内存泄漏吗?

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

    提前谢谢。

1 个答案:

答案 0 :(得分:0)

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

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

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

谢谢。