py3实现生产者消费者模式

121 阅读1分钟

下面是一个简单的 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 类创建并启动,使用队列来实现线程之间的同步和通信。