Python Tkinter mainloop增加了多线程应用程序的处理时间

时间:2018-05-31 04:31:29

标签: python multithreading python-3.x optimization tkinter

在我的应用程序中,我有一个在另一个线程上运行的进程,需要几秒钟才能完成,只需要完成一次。我还有一个加载窗口,让用户知道应用程序仍在运行,让他们取消该过程。此加载窗口每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,而是使用等效的实现方式来检查我的流程是否仍在运行 - 有点像joinmainloop合并在一起({{ 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

这减少了与没有加载窗口的情况相似的时间,但它给我带来了两个问题(据我所知):

  • 响应时间较慢(最差时间为0.5秒)
  • 应用程序将在流程结束后的某个时间结束(最差时间为0.5秒)

有没有办法实现这个没有这些缺点? 多处理(Tkinter understanding mainloop)会解决这个问题吗?

谢谢

0 个答案:

没有答案