Logo
Section 1 / 2

Python 中的线程

继承 Thread 类并重写 run 方法,使用 start 启动多个线程

导入

Python 中的线程

继承 Thread 类并重写 run 方法,使用 start 启动多个线程

Python 提供了多种并发机制,例如 threading、queues 和 multiprocessing。过去,threading 模块是实现并发的主要方式。几年前,multiprocessing 模块被加入 Python 的标准库中。本章将重点介绍如何使用线程和队列。

使用线程

我们从一个简单的例子开始,仅演示线程的基本工作原理。我们将继承 Thread 类,并让它将自身名称输出到标准输出。现在开始编码!

1import random 2import time 3 4from threading import Thread 5 6class MyThread(Thread): 7 """ 8 一个线程示例 9 """ 10 11 def __init__(self, name): 12 """初始化线程""" 13 Thread.__init__(self) 14 self.name = name 15 16 def run(self): 17 """运行线程""" 18 amount = random.randint(1, 3) 19 time.sleep(amount) 20 msg = "%s is running" % self.name 21 print(msg) 22 23def create_threads(): 24 """ 25 创建一组线程 26 """ 27 for i in range(5): 28 name = "Thread #%s" % (i+1) 29 my_thread = MyThread(name) 30 my_thread.start() 31 32if __name__ == "__main__": 33 create_threads()

在上述代码中,我们导入了 Python 的 random 模块、time 模块,并从 threading 模块中导入了 Thread 类。接着我们继承 Thread 类,并重写其 __init__ 方法以接收一个名为 "name" 的参数。要启动一个线程,必须调用其 start() 方法。当启动线程时,它会自动调用线程的 run 方法。我们重写了线程的 run 方法,使其随机选择一段睡眠时间。这里的 random.randint 会随机生成 1 到 3 之间的整数。然后线程将根据这个随机值休眠相应秒数,以模拟实际执行任务的过程。最后,我们打印出线程名称,通知用户该线程已完成。

函数 create_threads 将创建 5 个线程,并为每个线程分配一个唯一的名称。如果你运行这段代码,可能会看到类似如下的输出:

1Thread #2 is running 2Thread #3 is running 3Thread #1 is running 4Thread #4 is running 5Thread #5 is running

每次运行的输出顺序都会不同。多运行几次代码,观察输出顺序的变化。现在让我们编写一个更实用的例子!

sys 模块

编写一个多线程下载器