threading 模块
package
本文字数:875 字 | 阅读时长 ≈ 3 min

threading 模块

package
本文字数:875 字 | 阅读时长 ≈ 3 min

Python 多线程是指在同一个进程中,通过多个线程并发执行,以提高程序的并发性和响应性

Python 自带 threading 模块,封装了底层的 _thread 模块

1. 进程和线程

进程和线程

并发与并行

2. threading 模块

2.1 线程创建

使用 threading 模块可以方便地创建和管理线程, 通过 threading.Thread 类创建线程,传入 target 参数指定线程执行的函数,通过 start 方法启动线程,通过 join 方法等待线程执行完成

也就是说,当执行 thread.start() 时,就开始执行函数了

import threading

def print_numbers():
    for i in range(5):
        print(i)

thread = threading.Thread(target=print_numbers)  # 创建线程
thread.start()  # 启动线程
thread.join()  # 等待线程完成

输出: 0 1 2 3 4

2.2 继承的方式创建线程

创建一个自定义线程类,先继承 threading.Thread 类,并重写其 __init__ 方法和 run 方法,在线程启动时,系统会调用 run 方法

import threading
import time

class MyThread(threading.Thread):
    def __init__(self, name):
        super().__init__()
        self.name = name

    def run(self):
        print(f"Starting {self.name}")
        for i in range(5):
            print(f"{self.name}: {i}")
        print(f"Exiting {self.name}")
        print(self.is_alive())
thread1 = MyThread("Thread-1")  # 创建线程实例
thread2 = MyThread("Thread-2")

thread1.start()  # 启动线程
time.sleep(3)
thread2.start()
time.sleep(3)

print("thread1: ", thread1.is_alive())
thread1.join()  # 等待线程完成
print("thread1: ", thread1.is_alive())
print("thread2: ", thread2.is_alive())
thread2.join()
print("thread2: ", thread2.is_alive())

print("Exiting Main Thread")

输出如下,首先线程 1 开始执行,然后线程 2 开始执行(在执行 time.sleep(3) 时,thread1 就执行完毕了),最后主线程结束

Starting Thread-1
Thread-1: 0
Thread-1: 1
Thread-1: 2
Thread-1: 3
Thread-1: 4
Exiting Thread-1
True
Starting Thread-2
Thread-2: 0
Thread-2: 1
Thread-2: 2
Thread-2: 3
Thread-2: 4
Exiting Thread-2
True
thread1:  False
thread1:  False
thread2:  False
thread2:  False
Exiting Main Thread

2.3 守护线程

守护线程是指在主线程结束时自动退出的线程。可以通过设置 daemon=True 来创建守护线程。

主线程是只要执行程序就会启动一个主线程执行代码,当主线程结束时,守护线程也会随之结束,而非守护线程在主线程结束时,也会执行直到其执行完毕

import threading
import time

def background_task():
    while True:
        print("Running in the background...")
        time.sleep(1)

daemon_thread = threading.Thread(target=background_task, daemon=True)  # 创建守护线程
daemon_thread.start()  # 启动守护线程
time.sleep(5)  # 主线程等待5秒后结束

输出如下,主线程结束后,守护线程也会结束

Running in the background...
Running in the background...
Running in the background...
Running in the background...
Running in the background...

2.4 threading 类方法

threading 模块提供了一些类方法,用于获取当前线程、获取所有线程、设置线程名称等

判断线程是否存活: threading.is_alive()
获取当前线程: threading.current_thread()

5月 06, 2025
4月 06, 2025
ufw