# queue_hivenet模块说明 该框架基于Python原生的队列库(queue)的模式定义了队列处理的基本框架类(QueueFw),并基于该框架类,重构了普通队列(MemoryQueue,该对象合并了queue中的Queue、LifoQueue和PriorityQueue),同时考虑对分布式应用所需的网络队列(如各类MQ)提供框架层级的扩展开发支持。 本队列框架支持的方法与Python原生队列的支持的方法完全一致,因此可以直接使用原生队列替代实现队列处理,例如支持多进程访问的multiprocessing.Queue。 此外,框架也进行改造支持了水桶模式(bucket_mode),即可以往队列一直放对象,但当队列已满的情况下自动通过get丢弃前面的对象 队列支持方法包括: ## 构造函数 ``` @param {**kwargs} kwargs - 队列初始化动态参数,定义如下: maxsize=0 {int} - 队列深度,如果为0代表不限制队列大小 bucket_mode=False {bool} - 启动水桶模式,队列大小达到上限后插入数据可自动丢弃老数据(get出来并丢弃) ``` ## task_done 任务完成通知,用于支持生产者消费者模型处理 由消费者线程每获取到一个队列对象,完成处理后通过task_done通知队列任务完成 队列机制是将队列待执行任务数-1,以便于join函数判断队列任务是否已全部完成(已无待处理任务) ## join 队列完成阻塞函数,用于支持生产者消费者模型处理 该函数必须与task_done通知配套使用,当put一个任务到队列中,待执行任务数+1;执行一次task_done,待执行任务数-1 当待执行任务数为0时,join执行退出 ## qsize 返回队列长度 ## empty 判断队列是否为空 ## full 判断队列是否已满(无空闲空间) ## put(self, item, block=True, timeout=None, ****kwargs) 将对象放入队列中 ## get(self, block=True, timeout=None, ****kwargs 从队列中获取对象 ## put_nowait(self, item, ****kwargs) 采取不阻塞的模式将对象放入队列 ## get_nowait(self, ****kwargs) 采取不阻塞方式从队列中获取对象 # 内存队列实例(MemoryQueue) 重构了Python原生的queue的三种队列(Queue、LifoQueue和PriorityQueue),并合并在一个队列类中支持。 **注意:该队列只能线程共享,不能进程共享,如果需进程共享,可直接使用multiprocessing.Queue** 1、初始化参数可指定内存队列类型:queue_type=EnumQueueType.FIFO,取值包括: FIFO = 0 # 先进先出 LIFO = 1 # 后进先出 PRIORITY = 2 # 按优先级处理 2、对于PRIORITY 类型的队列,可以直接在put时指定优先级: priority {int} - 优先级,默认为0,数字越大优先级越高,仅EnumQueueType.PRIORITY使用