Python 多线程同步机制包括 Lock、Condition、Event、Queue,用于控制线程执行顺序。

同步机制对比

机制特点适用场景
Lock互斥访问保护临界区
Condition条件等待生产者-消费者
Event信号通知线程启停控制
QueueFIFO 任务队列任务分发

Lock(锁)

import threading
 
lock = threading.Lock()
 
def worker(name, order):
    with lock:
        order.append(name)
 
threads = []
order = []
for i in range(5):
    t = threading.Thread(target=worker, args=(i, order))
    threads.append(t)
    t.start()
 
for t in threads:
    t.join()

Condition(条件变量)

import threading
 
condition = threading.Condition()
current = 0
 
def worker(name, order):
    global current
    with condition:
        while name != current:
            condition.wait()
        order.append(name)
        current += 1
        condition.notify_all()

Event(事件)

import threading
 
start_event = threading.Event()
 
def worker(name, order):
    start_event.wait()
    order.append(name)
 
# 控制线程启动
start_event.set()
start_event.clear()

Queue(队列)

import threading
import queue
 
task_queue = queue.Queue()
 
def worker(order):
    while True:
        name = task_queue.get()
        if name is None:
            break
        order.append(name)
        task_queue.task_done()
 
# 按顺序放入任务
for i in range(5):
    task_queue.put(i)
 
task_queue.join()

选择指南

  • Lock:简单互斥,一次一个线程
  • Condition:需要等待条件满足
  • Event:线程启停、广播通知
  • Queue:任务队列、生产者-消费者