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
相关产品推荐
相关产品推荐

