文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

生产者消费者

2023-01-30 22:24

关注

1、概念

所谓,生产者与消费者模型,本质上是把进程通信的问题分开考虑

生产者,只需要往队列里面丢东西(生产者不需要关心消费者)

消费者,只需要从队列里面拿东西(消费者也不需要关心生产者)

 1 # 多线程实现生产者消费者模型
 2 import threading
 3 import random
 4 import queue
 5 import time
 6 
 7 
 8 class Producer(threading.Thread):
 9     def __init__(self, que):
10         super().__init__()
11         self.que = que
12 
13     def run(self):
14         while True:
15             data = random.randint(0,100)
16             print("生产者生产了:", data)
17             self.que.put(data)
18             time.sleep(1)
19 
20 
21 class Consumer(threading.Thread):
22     def __init__(self, que):
23         super().__init__()
24         self.que = que
25 
26     def run(self):
27         while True:
28             item = self.que.get()
29             print("消费者消费了:", item)
30 
31 
32 if __name__ == '__main__':
33     q = queue.Queue()
34     pro = Producer(q)
35     con = Consumer(q)
36     pro.start()
37     con.start()
多线程生产者消费者实例 面向对象
 1 import threading
 2 import random
 3 import time
 4 import queue
 5 
 6 
 7 def producer(que):
 8     while True:
 9         data = random.randint(0,100)
10         print("生产者生产了:", data)
11         que.put(data)
12         time.sleep(1)
13 
14 
15 def consumer(que):
16     while True:
17         item = que.get()
18         print("消费者消费了:", item)
19 
20 
21 if __name__ == '__main__':
22     q = queue.Queue()
23     pro_td = threading.Thread(target=producer, args=(q, ))
24     pro_td.start()
25     con_td = threading.Thread(target=consumer, args=(q, ))
26     con_td.start()
多线程生产者消费者 普通函数
 1 import multiprocessing
 2 import random
 3 import time
 4 
 5 
 6 def producer(que):
 7     while True:
 8         data = random.randint(0,100)
 9         print("生产者生产了:", data)
10         que.put(data)
11         time.sleep(1)
12 
13 
14 def consumer(que):
15     while True:
16         item = que.get()
17         print("消费者消费了:", item)
18 
19 
20 if __name__ == '__main__':
21     q = multiprocessing.Manager().Queue()
22     pro_td = multiprocessing.Process(target=producer, args=(q, ))
23     pro_td.start()
24     con_td = multiprocessing.Process(target=consumer, args=(q, ))
25     con_td.start()
26     pro_td.join()
多进程生产者消费者 函数
 1 import multiprocessing
 2 import random
 3 import time
 4 
 5 
 6 def producer(que):
 7     while True:
 8         data = random.randint(0,100)
 9         print("生产者生产了:", data)
10         que.put(data)
11         time.sleep(1)
12 
13 
14 def consumer(que):
15     while True:
16         item = que.get()
17         print("消费者消费了:", item)
18 
19 
20 if __name__ == '__main__':
21     q = multiprocessing.Manager().Queue()
22     pro_td = multiprocessing.Process(target=producer, args=(q, ))
23     pro_td.start()
24     con_td = multiprocessing.Process(target=consumer, args=(q, ))
25     con_td.start()
26     pro_td.join()
多进程 面向对象
 1 # gevent 协程实现生产者消费者
 2 import gevent
 3 from gevent import monkey; monkey.patch_all()
 4 import random
 5 from gevent.queue import Queue
 6 import time
 7 
 8 
 9 def producer(que):
10     while True:
11         data = random.randint(0, 100)
12         print("生产者生产了:", data)
13         q.put(data)
14         time.sleep(1)
15 
16 
17 def consumer(que):
18     while True:
19         item = que.get()
20         print("消费者消费了:", item)
21 
22 
23 if __name__ == '__main__':
24     q = Queue()
25     pro = gevent.spawn(producer, q)
26     con = gevent.spawn(consumer, q)
27     gevent.joinall([pro, con])
gevent实现生产者消费者

 

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯