在我的应用程序中,我有一个在另一个线程上运行的进程,需要几秒钟才能完成,只需要完成一次。我还有一个加载窗口,让用户知道应用程序仍在运行,让他们取消该过程。此加载窗口每0.5秒调用一次函数来更新消息:处理。,处理..或处理...在一个循环中。
我遇到的问题是加载窗口的计算时间会显着增加。以下是两种不同的实现:
没有加载窗口:
processing_thread.start()
processing_thread.join()
使用加载窗口:
processing_thread.start()
loading_window = LoadingWindow()
while processing_thread.is_alive():
try:
loading_window.window.update_idletasks()
loading_window.window.update()
except TclError:
return
请注意,我不使用mainloop
,而是使用等效的实现方式来检查我的流程是否仍在运行 - 有点像join
和mainloop
合并在一起({{ 3}})。我还使用mainloop()进行了测试,但仍然没有显着减少处理时间。
目前,快速解决方法是减慢循环并在主线程中添加更多空闲时间:
processing_thread.start()
loading_window = LoadingWindow()
while processing_thread.is_alive():
try:
loading_window.window.update_idletasks()
loading_window.window.update()
time.sleep(0.5)
except TclError:
return
这减少了与没有加载窗口的情况相似的时间,但它给我带来了两个问题(据我所知):
有没有办法实现这个没有这些缺点? 多处理(Tkinter understanding mainloop)会解决这个问题吗?
谢谢