下面是一个简单的 Python 3 实现生产者消费者模式的例子:
import threading
import queue
import time
import random
max_jobs = 10
num_producers = 5
num_consumers = 3
jobs_queue = queue.Queue(max_jobs)
exit_flag = False
class Producer(threading.Thread):
def __init__(self, thread_id):
super().__init__()
self.thread_id = thread_id
def run(self):
while not exit_flag:
job = random.randint(1, 100) # 生成随机任务
try:
jobs_queue.put(job, timeout=1) # 将任务放入队列
print(f"Producer {self.thread_id} produced job: {job}")
except queue.Full:
pass
time.sleep(random.randint(1, 3)) # 休眠一段时间
class Consumer(threading.Thread):
def __init__(self, thread_id):
super().__init__()
self.thread_id = thread_id
def run(self):
while not exit_flag:
try:
job = jobs_queue.get(timeout=1) # 从队列中取出任务
print(f"Consumer {self.thread_id} consumed job: {job}")
except queue.Empty:
pass
time.sleep(random.randint(1, 3)) # 休眠一段时间
def main():
# 创建生产者线程
producers = []
for i in range(num_producers):
producer = Producer(i)
producers.append(producer)
producer.start()
# 创建消费者线程
consumers = []
for i in range(num_consumers):
consumer = Consumer(i)
consumers.append(consumer)
consumer.start()
# 主线程等待所有线程结束
for producer in producers:
producer.join()
for consumer in consumers:
consumer.join()
print("All producers and consumers finished.")
if __name__ == "__main__":
main()
在这个例子中,有多个生产者和消费者线程,它们共享一个队列 jobs_queue。生产者线程生成随机任务并将其放入队列,消费者线程从队列中取出任务并消费。生产者和消费者线程通过 threading.Thread 类创建并启动,使用队列来实现线程之间的同步和通信。