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

为何Python线程代码输出为MainThread而非childThread?

问题解析:为何子线程名称未生效?

嘿,这个问题其实是Python线程使用里非常容易踩的小坑,我来帮你拆解清楚问题根源:

核心错误:target参数传递方式不对

你代码里的这一行是关键问题:

target=thread_task(),

这里你写的thread_task()是直接调用了函数,而不是把函数对象传递给线程。这会导致两个结果:

  • 在创建myThread对象的瞬间,thread_task()就已经在主线程里执行完毕了,所以输出的自然是主线程的名称MainThread。
  • 你创建的childThread子线程其实根本没被分配到任何任务——因为target接收的是函数执行后的返回值(这里thread_task没有返回值,所以是None),子线程启动后会立刻结束。

关于join()的作用

myThread.join()确实是让主线程等待子线程完成,但前提是子线程有任务要执行。在你的代码里,子线程没有实际任务,所以join()几乎瞬间就完成了,但此时thread_task()早就在主线程跑完了。

修正后的代码

只需要去掉thread_task后面的括号,把函数对象传递给target就行:

def thread_task():
    print("{0} executing".format(current_thread().getName()))


myThread = Thread(group=None,  # reserved
                  target=thread_task,  # 这里去掉括号!
                  name="childThread")

myThread.start()
myThread.join()

运行这段代码,你就能看到输出childThread executing了——因为现在thread_task是由子线程执行的,current_thread()拿到的是子线程的名称,join()也会让主线程等待子线程完成任务后再继续。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 09:50:37