【问题标题】:Looking for a way to stop memory leak in this basic program在这个基本程序中寻找一种方法来阻止内存泄漏
【发布时间】:2015-09-25 21:27:55
【问题描述】:

我是 Python 新手。该程序在 Tk() 窗口内创建一个标签。 “hi”这个词被无限期地写入标签。如何在无限期地写新的同时删除旧的hi?这就是我阻止内存泄漏的方法吗?代码如下:

from tkinter import *

def box(a):
    z=Label(root,text='%s'%(a))
    z.place(width=50,height=20)

def start(root):
    a="hi"
    box(a)
    root.after(100, start, root)

root = Tk()
start(root)
root.mainloop()

【问题讨论】:

    标签: python python-3.x memory-leaks tkinter


    【解决方案1】:

    如何只替换文本而不是每次都创建Label 对象。

    from tkinter import *
    
    def box(a):
        z['text'] = a
    
    def start(root):
        box('hi')
        root.after(100, start, root)
    
    root = Tk()
    z = Label(root, text='')
    z.place(width=50, height=20)
    start(root)
    root.mainloop()
    

    from tkinter import *
    
    
    def start(root, z):
        a = 'hi'
        z['text'] = a
        root.after(100, start, root, z)
    
    
    root = Tk()
    z = Label(root, text='')
    z.place(width=50, height=20)
    
    start(root, z)
    
    root.mainloop()
    

    【讨论】:

    • 这确实修复了内存泄漏,但现在 pythonw CPU 使用率飙升至 50%!使用我的代码,它会从大约 2% 开始,随着更多内存泄漏而缓慢增加
    • @JohnW4,将1 替换为100。我将值从 100 更改为 1 来测试它。现在我更新了答案,将1 更改为100
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-11
    • 1970-01-01
    • 2013-12-06
    相关资源
    最近更新 更多