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 卡住。