如何从线程终止程序?如果无法连接到服务器并且用户点击取消,我想终止整个程序。
class Client(tk.Frame):
def __init__(self, master=None):
super().__init__(master)
t = threading.Thread(target = self.connect)
t.setDaemon(True)
t.start()
def connect(self):
try:
r.connect( "localhost", 28015)
self.refresh_objects()
except r.ReqlDriverError as e:
self.db_exception_handler()
def db_exception_handler(self):
if(tk.messagebox.askretrycancel('ERROR','ERROR: Unable to connect to the database.')):
try:
r.connect( "localhost", 28015)
except r.ReqlDriverError as e:
self.db_exception_handler()
else:
root.destroy() #I want to terminate here the program
#I tried: threading.main_thread().destroy() but not working
def main():
root = tk.Tk()
root.title("IOT_LPS_Client")
cln = Client(master=root)
cln.mainloop()
try:
root.destroy()
except:
pass
if __name__ == '__main__':
main()
答案 0 :(得分:1)
我强烈建议编写一个训练有素的关闭,其中线程通知主线程需要退出,主线程调用sys.exit
。 [请注意,只有主线程sys.exit
才会终止进程]。
This blog post讨论了围绕此问题的一些问题和解决方案。简而言之,您可以使用threading.Event()
之类的东西将停止信号从任何线程传递到主线程。