当我们需要实现多线程的功能时,可以利用Python中的threading模块。下面是Python threading模块的使用指南。
一、基本介绍
threading模块提供了Thread类以及一些与线程相关的方法,可以管理线程的创建、启动、停止,还可以通过线程间同步机制来协调多个线程的执行。其中,常用的方法有以下几个:
-
start()
:启动线程; -
join()
:等待线程结束; -
run()
:线程要执行的任务; -
is_alive()
:判断线程是否存活。
二、示例说明
下面两个示例说明如何使用Python threading模块创建并启动多个线程。
示例一:打印当前时间
import threading
import time
class MyThread(threading.Thread):
def __init__(self, thread_id):
threading.Thread.__init__(self)
self.thread_id = thread_id
def run(self):
print("Thread %d started" % self.thread_id)
print(f"Current time is {time.ctime(time.time())}")
print("Thread %d finished" % self.thread_id)
# 创建两个线程
thread1 = MyThread(1)
thread2 = MyThread(2)
# 启动两个线程
thread1.start()
thread2.start()
# 等待两个线程结束
thread1.join()
thread2.join()
print("All threads finished")
上述代码中,自定义了一个MyThread类继承自threading.Thread,重写了其run方法,用来完成线程要执行的任务。在示例中,该任务为打印线程开启的时间以及当前的时间。创建两个MyThread对象,并分别启动它们,最后join等待两个线程的结束。执行示例后,会依次输出如下结果:
Thread 1 started
Thread 2 started
Current time is Fri Aug 27 20:17:16 2021
Current time is Fri Aug 27 20:17:16 2021
Thread 1 finished
Thread 2 finished
All threads finished
示例二:使用Lock同步线程
import threading
class MyThread(threading.Thread):
def __init__(self, thread_id, lock):
threading.Thread.__init__(self)
self.thread_id = thread_id
self.lock = lock
def run(self):
self.lock.acquire() # 获取锁
print("Thread %d started" % self.thread_id)
print("Thread %d finished" % self.thread_id)
self.lock.release() # 释放锁
# 创建一个锁
lock = threading.Lock()
# 创建两个线程并传入锁对象
thread1 = MyThread(1, lock)
thread2 = MyThread(2, lock)
# 启动两个线程
thread1.start()
thread2.start()
# 等待两个线程结束
thread1.join()
thread2.join()
print("All threads finished")
上述代码中,定义了一个MyThread类继承自threading.Thread,该类的构造函数传入了一个lock对象,使用lock.acquire()方法来获取锁,避免多个线程同时执行临界区代码。在示例中,临界区就是打印线程开始和结束的信息。创建两个对象并分别启动它们,最后join等待两个线程的结束。执行示例后,会依次输出如下结果:
Thread 1 started
Thread 1 finished
Thread 2 started
Thread 2 finished
All threads finished
至此,Python threading模块的使用指南介绍完毕。通过使用该模块,我们可以轻松地实现多线程功能,提高程序性能。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python threading模块的使用指南 - Python技术站