生产者消费者模式
生产者消费者模式并不是GOF提出的众多模式之一,但它依然是开发同学编程过程中最常用的一种模式。
生产者模块负责产生数据,放入缓冲区,这些数据由另一个消费者模块儿来从缓冲区取出并进行消费者相应的处理。该模式的优点在于:
- 解耦:缓冲区的存在可以让生产者和消费者降低互相之间的依赖性,一个模块儿代码变化,不会直接影响另一个模块儿
- 并发:由于缓冲区,生产者和消费者不是直接调用,而是两个独立的并发主体,生产者产生数据之后把它放入缓冲区,就继续生产数据,不依赖消费者的处理速度
简单队列
消费者按
FIFO
取数据,一律平等。
class Queue:
"""
队列 fifo
"""
def __init__(self):
self.__lst = []
def push(self, uid: int) -> None:
self.__lst.append(uid)
def pop(self) -> int:
return self.__lst.pop(0)
def is_empty(self) -> bool:
return not bool(self.__lst)
加权队列
消费者按
FIFO
取数据,当权重高的优先。
class WeightQueue:
"""
加权队列
"""
def __init__(self):
self.__lst = []
def push(self, uid: tuple) -> None:
self.__lst.append(uid)
def pop(self) -> tuple:
self.__lst = sorted(self.__lst, key=lambda k: k[0], reverse=True)
return self.__lst.pop(0)
def is_empty(self) -> bool:
return not bool(self.__lst)
小结:
python中有很多数据结构,而解决消费者的处理速度的问题就是队列,还有很多队列例如,双端队列等等,可以更好的解决实际问题。