python 多进程--生产者消费者模型
生产者消费者模型
·
"""
生产者消费者模型:模型目的是解决无线等待的问题
生产结束后,消费者将现有的东西消费掉后,整个程序结束
多进程实现
"""
from multiprocessing import Process, JoinableQueue
import time, random, os
# 生产
# 模拟数据--放入--进程消息队列
def fun1(n, q):
# 生产10个 时间随机1~3秒 生产一次
for i in range(10):
time.sleep(random.randint(1, 3))
# 生产n 第i个
res = "{}{}".format(n, i)
# 查看子进程PID号,
print("子进程号:{}生产:{}".format(os.getppid(), res))
# 放入消息队列
q.put(res)
# 生产结束 阻塞直到队列为空
q.join()
# 消费
# 模拟数据--获取--进程消息队列
def fun2(n, q):
# 一直消费
while True:
res = q.get()
# 消费 消耗随机1~3秒
time.sleep(random.randint(1, 3))
print("子进程号:{}-{}吃{}".format(os.getppid(), n, res))
# 向q.join()发送一次信号,证明一个数据已经被取走了
q.task_done()
if __name__ == '__main__':
# 创建进程消息队列
q = JoinableQueue()
# 创建 多进程 生产
p1 = Process(target=fun1, args=('葡萄', q))
p2 = Process(target=fun1, args=('苹果', q))
p3 = Process(target=fun1, args=('橘子', q))
# 创建多进程 消费
c1 = Process(target=fun2, args=('吃货1', q))
c2 = Process(target=fun2, args=('吃货2', q))
# 设置为守护进程:
c1.daemon = True
c2.daemon = True
# 全部启动
p_l = [p1, p2, p3, c1, c2]
for p in p_l:
p.start()
# 等待生产进程结束
p1.join()
p2.join()
p3.join()
print("生产结束")
# 因为生产者内部,一直等待队列空才会退出,所以生产结束意味着全部结束了

GitCode 天启AI是一款由 GitCode 团队打造的智能助手,基于先进的LLM(大语言模型)与多智能体 Agent 技术构建,致力于为用户提供高效、智能、多模态的创作与开发支持。它不仅支持自然语言对话,还具备处理文件、生成 PPT、撰写分析报告、开发 Web 应用等多项能力,真正做到“一句话,让 Al帮你完成复杂任务”。
更多推荐
所有评论(0)