Python脚本中Threading线程失效:为何myname函数未执行?
线程无法正常工作的原因分析
你的代码存在一个核心错误,直接导致线程功能失效:
在创建threading.Thread对象时,你给target参数传入的是函数调用结果(带括号的infinite_loop()、myname()),而非函数本身。
具体问题拆解
看这两行关键代码:
t1 = threading.Thread(target=infinite_loop()) t2 = threading.Thread(target=myname())
当Python执行到t1 = threading.Thread(...)时,会优先执行infinite_loop()函数——而这个函数是无限死循环,程序会彻底卡在这个循环里,后续创建t2、启动线程的代码根本没机会运行,自然myname()永远不会被执行。
修复方法
将target参数改为传入函数对象(去掉函数名后的括号),这样线程对象会在调用start()时,才在新线程中触发函数执行:
import threading def infinite_loop(): while 1 == 1: pass def myname(): print("chralabya") # 传递函数引用,而非函数调用结果 t1 = threading.Thread(target=infinite_loop) t2 = threading.Thread(target=myname) t1.start() t2.start()
修改后,t1启动后会在独立线程中运行死循环,主线程可以继续执行t2.start(),myname()就能正常输出内容了。
内容的提问来源于stack exchange,提问作者xelov35
相关产品推荐
相关产品推荐

