三亩地 三亩地SAN MU DI · CODE DIARY
ARTICLE DETAIL

日记详情

真实记录编程学习的某一天,欢迎挑你感兴趣的翻一翻。

threading线程模块:线程创建、执行顺序、线程等待详解

threading线程模块:线程创建、执行顺序、线程等待详解

博客导语

Python多线程是IO密集任务最优解之一,新手最容易踩的坑:主线程提前退出、子线程乱序执行、不知道join阻塞原理。本文手把手讲解线程两种创建方式、守护线程、线程等待、执行顺序底层机制。

一、线程创建两种标准方式

1. 函数式创建(简单任务首选)

import threading import time def task(name): print(f"子线程 {name} 开始执行") time.sleep(2) print(f"子线程 {name} 执行结束") if __name__ == "__main__": t1 = threading.Thread(target=task, args=("线程1",)) t2 = threading.Thread(target=task, args=("线程2",)) t1.start() t2.start()

2. 类继承创建(复杂任务首选)

class MyThread(threading.Thread): def __init__(self,name): super().__init__() self.name = name def run(self): print(f"子线程 {self.name} 运行") time.sleep(2) t = MyThread("自定义线程") t.start()

二、线程核心方法

  • start():创建并启动线程,只能调用一次

  • run():线程真正执行逻辑,不启动线程

  • join():主线程阻塞等待子线程结束

  • is_alive():判断线程是否存活


三、线程等待 join() 关键原理

默认情况下,主线程不会等待子线程,主线程执行完毕会直接退出程序。join() 会阻塞主线程,直到子线程执行完毕。

t1.start() t1.join() # 主线程等待 t1 结束再往下走 print("主线程结束")

四、守护线程 daemon

守护线程:主线程退出,守护线程强制退出,不阻塞程序结束。日志、心跳线程常用。

t = threading.Thread(target=task, daemon=True)

五、线程执行无序性

线程由操作系统调度,执行顺序随机,无法人为控制,这也是线程安全问题的根源。

← 返回列表