Python 2.7。我有一个用Tkinter编写的GUI,它创建一个单独的线程来运行任务,以便GUI在运行时不被阻止。在任何地方都没有锁定:
class MainWindow(Tkinter.Tk):
def __init__(self):
Tkinter.Tk.__init__(self)
self.initialize()
def initialize(self):
# Configure the window, buttons etc
def button_function(self):
t = threading.Thread(target=self.myfunction)
t.daemon = True
t.start()
return
def myfunction(self);
# Calls a function in an imported module
当我运行它时,GUI挂起,然后在没有回溯的情况下崩溃。如果我在主线程中调用该函数它不会崩溃(尽管GUI在myfunction运行时'冻结'):
def button_function(self):
self.myfunction() # Runs fine
return
在运行时,函数本身有时可以在内存中存储几MB。注释掉较大的变量可以使函数成功返回。
我应该补充一点,子线程不会调用GUI函数。 GUI只是一个单独的命令行函数的包装器。
我怀疑正确的解决方案是将较大的变量写入临时文件,还是重新设计函数以更频繁地返回主线程。
子线程中的内存使用是否有限制,如果有,这是如何配置的?
子线程中没有内存限制。
(我鼓励favoretti或者mcy发布一个类似的答案接受,所以这并没有加入无法回答的问题的无限队列.OP回答他自己的问题没有错。)