You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在不终止程序的情况下新增线程?代码问题求助

问题解决方法

你的核心问题是提交线程时错误地直接调用了函数,导致程序卡在无限循环里。

原代码里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.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 06:29:55