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

Python多线程异常求助:start()与run()执行效果一致问题

Python多线程start()与run()表现一致的问题分析及修复

问题原因

你在创建threading.Thread对象时犯了一个关键错误:target参数需要传入函数对象,但你写的是target=wait()——这会直接在主线程中执行wait()函数,把函数的返回值(这里是None)赋值给target。

当你调用t1.start()时,因为target是None,线程的run()方法不会执行任何自定义逻辑,所以整个流程完全是主线程串行执行:先跑完wait()的所有逻辑(打印等待开始、休眠3秒、打印等待结束),再执行print("Meanwhile...")。这就导致start()和直接调用run()的效果完全一致,根本没有启动新线程。

修复方案

把target=wait()改成target=wait,也就是传入函数本身,不要加括号调用。这样线程启动后,会在新的线程中执行wait函数,主线程则会继续向下执行,立即打印"Meanwhile...",实现你预期的并发效果。

修复后的代码:

import threading
from time import sleep


def wait():
    print("Waiting started")
    sleep(3)
    print("Waiting ended")


def main():
    t1 = threading.Thread(target=wait)  # 去掉wait后面的括号
    t1.start()
    print("Meanwhile...")


if __name__ == '__main__':
    main()

执行修复后的代码,输出顺序会变成:

Waiting started
Meanwhile...
# 3秒后打印
Waiting ended

内容的提问来源于stack exchange,提问作者Niclas17

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 21:52:12