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

Python创建Thread线程未调用start方法为何会自动运行?

问题原因分析

核心问题出在你给Thread的target参数传值的写法上:

  • 你写的target=myobj.rn()带了括号,这是直接调用函数的语法,Python会在这一行代码执行时立刻运行rn方法,再把rn的返回值(你这里没有定义返回值,默认是None)赋值给target参数,整个过程和线程是否启动没有任何关系。
  • 正确的写法是去掉括号,写target=myobj.rn,这才是把rn这个函数对象本身传给target,后续你调用线程的start()方法时,才会在线程中执行这个函数。
执行流程拆解

你的代码实际执行顺序是:

  1. 运行myobj=myclass():执行类的构造方法,打印Hey there, i am constructor,完成实例化。
  2. 运行Thread(target=myobj.rn()):
    • 第一步先计算参数值:执行myobj.rn(),打印okk,得到返回值None
    • 第二步把target参数设为None,完成线程实例的创建
  3. 此时即便调用mythread.start()也不会有任何输出,因为target为None,没有可执行的目标函数。
修正后的代码示例
from threading import Thread
class myclass:
    def __init__(self):
        print("Hey there, i am constructor")
    def rn(self):
        print("okk")
    
myobj=myclass()
# 去掉rn后的括号,只传函数对象
mythread=Thread(target=myobj.rn)
# 此时调用start才会执行rn方法打印okk
mythread.start()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 14:36:05