如何在不终止程序的情况下新增线程?代码问题求助
问题解决方法
你的核心问题是提交线程时错误地直接调用了函数,导致程序卡在无限循环里。
原代码里executor.submit(add_thread_function())这一行,add_thread_function()是直接执行函数,而不是把函数对象传给线程池。这就导致当x=50时,程序会立刻进入这个无限循环,根本没机会继续执行后面的循环。
只需要改一行代码就能解决:
把
executor.submit(add_thread_function())
改成
executor.submit(add_thread_function)
修正后的完整代码:
import asyncio from concurrent.futures import ThreadPoolExecutor import time async def commands_update(): for x in range(1000): if x == 50: # 这里只传函数名,不要加括号调用 executor.submit(add_thread_function) print(x) def add_thread_function(): while True: print("added new thread") time.sleep(1) with ThreadPoolExecutor(max_workers=None) as executor: executor.submit(asyncio.run, commands_update())
修改后,当x=50时,线程池会启动一个独立线程去跑add_thread_function的无限循环,而原commands_update里的循环会继续往下打印x,完全不会被阻塞。
另外提一句:用线程池来运行asyncio.run其实有点多余,如果你不需要额外线程的话,直接在主程序里调用asyncio.run(commands_update())就行,但如果你的实际场景确实需要把async函数放到线程池里跑,那当前写法没问题。
内容的提问来源于stack exchange,提问作者Tyler Tan Y.R.
相关产品推荐
相关产品推荐

