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

