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使用