前言
在 Python 中,多线程编程是实现并发任务处理的重要手段。本文将详细介绍 thread
和 threading
模块的使用方法,并提供一些实用的示例。
thread 模块
thread
模块是 Python 中最早的多线程支持模块,但官方已经不推荐使用该模块,而是建议使用功能更强大的 threading
模块。尽管如此,了解 thread
模块的基本用法仍然是很有帮助的。
常用函数
函数 | 描述 |
---|
start_new_thread(function, args) | 创建并启动一个新的线程,指定函数和参数 |
allocate_lock() | 分配一个锁对象(LockType 类型) |
exit() | 终止当前线程的执行 |
LockType 对象的方法
方法 | 描述 |
---|
acquire([blocking]) | 尝试获取锁,可选参数 blocking 控制是否阻塞等待 |
locked() | 检查锁是否已被获取,返回布尔值 |
release() | 释放锁 |
threading 模块
threading
模块提供了更高级的线程管理功能,包括线程类、锁、事件、条件变量等。以下是 threading
模块的一些基本用法:
Thread 类
Thread
类是 threading
模块的核心类,用于创建和管理线程。
import threading
def worker(num):
print(f'Worker: {num}')
threads = []
for i in range(5):
t = threading.Thread(target=worker, args=(i,))
threads.append(t)
t.start()
Lock 类
Lock
类用于实现线程间的同步,防止多个线程同时访问共享资源。
import threading
lock = threading.Lock()
counter = 0
def increment():
global counter
lock.acquire()
try:
counter += 1
finally:
lock.release()
threads = []
for _ in range(100):
t = threading.Thread(target=increment)
threads.append(t)
t.start()
for t in threads:
t.join()
print(f'Final counter value: {counter}')
Event 类
Event
类用于线程间的通信,可以用来通知其他线程某个事件已经发生。
import threading
event = threading.Event()
def wait_for_event(e):
print('Waiting for event...')
e.wait()
print('Event set!')
thread = threading.Thread(target=wait_for_event, args=(event,))
thread.start()
# 主线程等待一段时间后设置事件
import time
time.sleep(2)
event.set()
Condition 类
Condition
类用于更复杂的线程间同步,通常与 Lock
类结合使用。
import threading
cOndition= threading.Condition()
item = None
def consumer(cond):
with cond:
while item is None:
cond.wait()
print(f'Consumed: {item}')
def producer(cond):
global item
with cond:
item = 'something'
cond.notify_all()
consumer_thread = threading.Thread(target=consumer, args=(condition,))
producer_thread = threading.Thread(target=producer, args=(condition,))
consumer_thread.start()
producer_thread.start()
consumer_thread.join()
producer_thread.join()
总结
通过本文的介绍,希望读者能够对 Python 中的多线程编程有一个全面的了解,并能够在实际开发中灵活运用 thread
和 threading
模块。更多技术文章请访问我的博客 HuRuWo 的技术小站,包括 Android 逆向、App 开发、爬虫技术等相关知识。