我想要一个快速而又脏的方法来获取一些文件名而无需在我的
shell中输入,所以我有以下代码:
from tkinter.filedialog import askopenfile
file = askopenfile()
现在一切正常,但它确实创建了一个需要关闭的多余的tkinter GUI.我知道我可以这样做来压制它:
import tkinter as tk
tk.Tk().withdraw()
但这并不意味着它没有装在背上.它只是意味着现在有一个我无法关闭/销毁的Tk()对象.
所以这让我想到了真正的问题.
似乎每次我创建一个Tk(),不管我是del还是destroy()它,内存都没有被释放.见下文:
import tkinter as tk
import os, psutil
process = psutil.Process(os.getpid())
def mem(): print(f'{process.memory_info().rss:,}')
# initial memory usage
mem()
# 21,475,328
for i in range(20):
root.append(tk.Tk())
root[-1].destroy()
mem()
# 24,952,832
# 26,251,264
# ...
# 47,591,424
# 48,865,280
# try deleting the root instead
del root
mem()
# 50,819,072
如图所示,即使在每个Tk()实例被销毁并删除根之后,python也不会释放使用.然而,这不是其他对象的情况ÿ