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

Windows任务管理器:Python应用程序内存使用量增加,python,sockets,memory-leaks,tkinter,Python,Sockets,Memory Leaks,Tkinter,我用Python3.4和Tkinter制作了一个应用程序。 我的应用程序运行几个(3-5)线程,每个线程都执行以下操作 从套接字(UDP)获取消息的recvfrom()的无休止循环 显示消息并将其写入文件的无限循环 我在基于XP的windows嵌入式操作系统上使用我的应用程序, 我用TaskManager观察内存使用情况, 因为我想在不关机的情况下长时间运行我的应用程序(可能超过一个月) 那么,一个问题是 内存使用(物理)逐渐增加,但有时急剧减少。 所以总的来说看起来不错 但从长远来看,虚拟内存

我用Python3.4和Tkinter制作了一个应用程序。 我的应用程序运行几个(3-5)线程,每个线程都执行以下操作

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

    那么,一个问题是

    内存使用(物理)逐渐增加,但有时急剧减少。 所以总的来说看起来不错

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

    我希望GarbageCollection会有所帮助,所以我在代码中插入了gc.collect(), 以便每3小时调用一次。 但没有任何变化,print(gc.collect())始终显示为0(除了在应用程序启动之后)

    这是内存泄漏吗

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


    提前谢谢。

    我自己发现了原因,所以我把它写在这里并结束了问题

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

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

    多谢各位