队列(Queue)

在多个线程之间安全的交换数据信息,队列在多线程编程中特别有用

队列的好处:

提高双方的效率,你只需要把数据放到队列中,中间去干别的事情。

完成了程序的解耦性,两者关系依赖性没有不大。

一、队列的类型:

1、lass queue.Queue(maxsize=0)

先进先出,后进后出

2、class queue.LifoQueue(maxsize=0)

是先进后出,后进新出规则,last in fisrt out

3、class queue.PriorityQueue(maxsize=0)

根据优先级来取数据。存放数据的格式  : Queue.put((priority_number,data)),priority_number越小,优先级越高,data代表存入的值

注:maxsize代表这个队列最大能够put的长度

二、队列(Queue)的内置方法

生产者消费者模型

并发编程中使用生产者和消费者模式能够解决绝大多数并发问题。该模式通过平衡生产线程和消费线程的工作能力来提高程序的整体处理数据的速度。

1、为什么要使用生产者和消费者模式

在线程世界里,生产者就是生产数据的线程,消费者就是消费数据的线程。在多线程开发当中,如果生产者处理速度很快,而消费者处理速度很慢,那么生产者就必须等待消费者处理完,才能继续生产数据。同样的道理,如果消费者的处理能力大于生产者,那么消费者就必须等待生产者。为了解决这个问题于是引入了生产者和消费者模式。

2、什么是生产者消费者模式

生产者消费者模式是通过一个容器来解决生产者和消费者的强耦合问题。生产者和消费者彼此之间不直接通讯,而通过阻塞队列来进行通讯,所以生产者生产完数据之后不用等待消费者处理,直接扔给阻塞队列,消费者不找生产者要数据,而是直接从阻塞队列里取,阻塞队列就相当于一个缓冲区,平衡了生产者和消费者的处理能力。

3、生成者消费者模型例子

3.1、生产者生产完毕,消费者再消费例子:

3.2 边生产边消费的模型例子


图解:

生产者生产,消费者消费。

消费者每消费一次,都要去执行以下task_done()方法,来告诉消费者已经消费成功,相当于吃完饭,消费者应该给钱了。

消费者每消费一次,则队列中计数器会做减1操作。

当队列中的计数器为0的时候,则生产者不阻塞,继续执行,不为0的时候,则阻塞,直到消费者消费完毕为止。