如何实现python一个进程生产多个进程消费

一、整体流程

首先,我们来看一下整体的流程,可以用一个表格展示如下:

erDiagram
    PROCESS_PRODUCER ||--o{ PROCESS_CONSUMER : 生产多个消费者进程

二、步骤及代码示例

1. 创建一个生产者进程

首先,我们需要创建一个生产者进程,用来生产数据。代码示例如下:

import multiprocessing
import time

def producer(queue):
    for i in range(10):
        data = f"Data {i}"
        queue.put(data)
        print(f"Produced data: {data}")
        time.sleep(1)

if __name__ == "__main__":
    queue = multiprocessing.Queue()
    p = multiprocessing.Process(target=producer, args=(queue,))
    p.start()

2. 创建多个消费者进程

然后,我们需要创建多个消费者进程来消费生产者生产的数据。代码示例如下:

def consumer(queue, consumer_id):
    while True:
        data = queue.get()
        if data is None:
            break
        print(f"Consumer {consumer_id} consumed data: {data}")

if __name__ == "__main__":
    num_consumers = 3
    consumers = []
    for i in range(num_consumers):
        c = multiprocessing.Process(target=consumer, args=(queue, i))
        c.start()
        consumers.append(c)

3. 主进程等待子进程结束

最后,主进程需要等待所有子进程都结束后再退出。代码示例如下:

if __name__ == "__main__":
    # 在创建消费者进程后添加以下代码
    for c in consumers:
        c.join()

    # 生产者结束后添加以下代码,通知消费者进程结束
    for _ in range(num_consumers):
        queue.put(None)

三、关系图

journey
    title 整体流程
    section 创建生产者进程
        PROCESS_PRODUCER[生产者进程]
    section 创建消费者进程
        PROCESS_CONSUMER1[消费者进程1]
        PROCESS_CONSUMER2[消费者进程2]
        PROCESS_CONSUMER3[消费者进程3]
    section 结束主进程
        PROCESS_PRODUCER --> PROCESS_CONSUMER1
        PROCESS_PRODUCER --> PROCESS_CONSUMER2
        PROCESS_PRODUCER --> PROCESS_CONSUMER3

四、总结

通过以上步骤和代码示例,我们可以实现一个进程生产多个进程消费的功能。希望对你有所帮助,如果有任何问题,欢迎随时向我求助。祝学习顺利!