with ThreadPoolExecutor导致阻塞

最近写多线程遇到with语句导致阻塞界面的问题

以下代码不阻塞:

    # 点击按钮就会执行start
    def start( self, event ):
        executor= ThreadPoolExecutor(max_workers=thread_num)
        futures =[executor.submit(slow,i) for i in range(10)]

以下代码阻塞

    # 点击按钮就会执行start
    def start( self, event ):
        with ThreadPoolExecutor(max_workers=thread_num) as executor:
            futures =[executor.submit(slow,i) for i in range(10)]

原因:

with ThreadPoolExecutor 语句会在退出时调用 executor.shutdown(wait=True),这会等待所有任务完成。如果任务耗时较长,主线程会被阻塞,导致 UI 卡住。