python进阶之多线程(进程)同步执行的消费者与生产者模型
来源:互联网 发布:linux防cc攻击 编辑:程序博客网 时间:2024/06/07 06:25
Python的Queue模块中提供了同步的、 线程安全的队列类, 包括FIFO(先⼊先出)队列Queue, LIFO(后⼊先出) 队列LifoQueue, 和优先级队列PriorityQueue。 这些队列都实现了锁原语(可以理解为原⼦操作, 即要么不做, 要么就做完) , 能够在多线程中直接使⽤。 可以使⽤队列来实现线程间的同步。
⽤FIFO队列实现上述⽣产者与消费者问题的代码如下:
from threading import Threadfrom queue import Queueimport timeclass Producer(Thread):def run(self):global queuecount = 0while True:if queue.qsize() <1000:if (1000-queue.qsize()>100):for i in range(100):count += 1msg = '生产产品'+str(count)queue.put(msg)print(msg)time.sleep(0.5)class Consumer(Thread):def run(self):global queuewhile True:if queue.qsize()>100:for i in range(5):print(self.name+'消费了'+queue.get())time.sleep(1)def main():for i in range(500):queue.put('初始化产品'+str(i))for pi in range(2):producer = Producer()producer.start()for ci in range(5):consumer = Consumer()consumer.start()if __name__ == '__main__':queue = Queue()main()
⽣产者消费者模式的说明
为什么要使⽤⽣产者和消费者模式?在线程世界⾥, ⽣产者就是⽣产数据的线程, 消费者就是消费数据的线程。在多线程开发当中, 如果⽣产者处理速度很快, ⽽消费者处理速度很慢, 那么⽣产者就必须等待消费者处理完, 才能继续⽣产数据。 同样的道理, 如果消费者的处理能⼒⼤于⽣产者, 那么消费者就必须等待⽣产者。 为了解决这个问题于是引⼊了⽣产者和消费者模式。什么是⽣产者消费者模式⽣产者消费者模式是通过⼀个容器来解决⽣产者和消费者的强耦合问题。 ⽣产者和消费者彼此之间不直接通讯, ⽽通过阻塞队列来进⾏通讯, 所以⽣产者⽣产完数据之后不⽤等待消费者处理, 直接扔给阻塞队列, 消费者不找⽣产者要数据, ⽽是直接从阻塞队列⾥取, 阻塞队列就相当于⼀个缓冲区, 平衡了⽣产者和消费者的处理能⼒。这个阻塞队列就是⽤来给⽣产者和消费者解耦的。
纵观⼤多数设计模式, 都会找⼀个第三者出来进⾏解耦,
阅读全文
0 0
- python进阶之多线程(进程)同步执行的消费者与生产者模型
- python线程和进程,生产者消费者模型
- 线程同步:生产者与消费者模型
- 线程的同步与互斥---生产者消费者模型
- 3.4生产者/消费者的线程同步模型
- pyhton进阶之多线程的同步执行
- 进程与线程,同步与死锁,生产者消费者模式
- java之多线程实例 生产者与消费者
- 【线程的同步与互斥 (互斥量 条件变量 信号量)】生产者与消费者模型
- 线程的同步与互斥(生产者与消费者模型)
- Python 生产者与消费者模型
- 线程同步之经典生产者-消费者模型
- 线程的生产者消费者模型
- 经典进程的同步问题-生产者与消费者
- 生产者消费者模型-python-多进程
- 生产者消费者模型-python-多进程
- 多线程 消费者与生产者 的问题 (线程同步)
- 消费者与生产者的线程之间同步操作
- NYOJ Star
- PB 数据窗口的字段设置焦点
- grpc初探
- HDU
- 转载Ajax+js实时聊天文
- python进阶之多线程(进程)同步执行的消费者与生产者模型
- 数据结构与算法Java版——八皇后问题
- .net mvc4 Webapi Rest接口返回值
- Android 工具集(持续更新)
- 深度学习框架TensorFlow学习与应用(一)——基本概念与简单示例
- 宏基因组实战6. 不比对快速估计基因丰度Salmon
- DPDK(11):内存初始化
- java:文件的存取
- this关键字的应用