HiveNetCore.queue_hivenet module

队列任务处理模块

class HiveNetCore.queue_hivenet.EnumQueueType(value)[源代码]

基类:enum.Enum

队列类型

FIFO = 0
LIFO = 1
PRIORITY = 2
class HiveNetCore.queue_hivenet.MemoryQueue(**kwargs)[源代码]

基类:HiveNetCore.queue_hivenet.QueueFw

QueueFw的内存基础队列实现

重新实现Python基础的Queue、LifoQueue和PriorityQueue 注意: 该队列只能线程共享, 不能进程共享, 如果需进程共享, 可直接使用multiprocessing.Queue

参数

kwargs (**kwargs) –

初始化参数, 定义如下:

queue_type {EnumQueueType} - 队列类型, 默认为EnumQueueType.FIFO

maxsize=0 {int} - 队列深度, 如果为0代表不限制队列大小

bucket_mode=False {bool} - 启动水桶模式, 队列大小达到上限后插入数据可自动丢弃老数据(get出来并丢弃)

class HiveNetCore.queue_hivenet.PriorityObject(obj, priority=0)[源代码]

基类:object

优先级对象类, 将一个对象封装为可按优先级排序的对象, 供MemoryQueue的PRIORITY类型队列使用

__init__(obj, priority=0)[源代码]

构造函数

参数
  • obj (object) – 需要构建的对象

  • priority (int) – default=0, 优先级, 数字越大优先级越高

class HiveNetCore.queue_hivenet.QueueFw(**kwargs)[源代码]

基类:abc.ABC

基础队列处理框架, 用于定义队列的公共方法, 便于扩展不同的队列类型(例如支持各类MQ)

框架基类重写了python基础库的Queue, 调用方法与Queue一致, 但增加了动态参数kwargs的扩展

参数

kwargs (**kwargs) –

队列初始化动态参数, 定义如下:

maxsize=0 {int} - 队列深度, 如果为0代表不限制队列大小

bucket_mode=False {bool} - 启动水桶模式, 队列大小达到上限后插入数据可自动丢弃老数据(get出来并丢弃)

注: 其他定义参考具体的实例化类

__init__(**kwargs)[源代码]

构造函数

参数

kwargs (**kwargs) –

队列初始化动态参数, 定义如下:

maxsize=0 {int} - 队列深度, 如果为0代表不限制队列大小

bucket_mode=False {bool} - 启动水桶模式, 队列大小达到上限后插入数据可自动丢弃老数据(get出来并丢弃)

注: 其他定义参考具体的实例化类

clear(**kwargs)[源代码]

清空队列

参数

kwargs (**kwargs) – 其他获取参数, 具体参数定义参考具体实现类

empty(**kwargs)[源代码]

判断队列是否为空

参数

kwargs (**kwargs) – 其他判断参数, 具体参数定义参考具体实现类

返回

如果队列为空, 返回True,反之返回False

返回类型

bool

full(**kwargs)[源代码]

判断队列是否已满(无空闲空间)

参数

kwargs (**kwargs) – 其他判断参数, 具体参数定义参考具体实现类

返回

如果队列为空, 返回True,反之返回False

返回类型

bool

get(block=True, timeout=None, **kwargs)[源代码]

从队列中获取对象

参数
  • block (bool) – default=True, 是否阻塞, 如果为True则待真正获取到数据才返回

  • timeout (number) – default=None, 阻塞超时时间, 单位为秒

  • kwargs (**kwargs) – 其他获取参数, 具体参数定义参考具体实现类

引发

queue.Empty – 遇到队列为空时, 非阻塞模式直接抛出异常, 阻塞模式超时后抛出异常

get_nowait(**kwargs)[源代码]

采取不阻塞方式从队列中获取对象

参数

kwargs (**kwargs) – 其他获取参数, 具体参数定义参考具体实现类

引发

queue.Empty – 遇到队列为空时, 直接抛出异常

property init_kwargs

获取初始化队列的参数

@property {dict}

join(**kwargs)[源代码]

队列完成阻塞函数, 用于支持生产者消费者模型处理

该函数必须与task_done通知配套使用, 当put一个任务到队列中, 待执行任务数+1;执行一次task_done, 待执行任务数-1 当待执行任务数为0时, join执行退出

参数

kwargs (**kwargs) – 参数, 具体参数定义参考具体实现类

put(item, block=True, timeout=None, **kwargs)[源代码]

将对象放入队列中

参数
  • item (object) –

    要放进队列中的对象

    注意: 该对象建议是基础类型, 可序列化, 避免使用MQ等中间件传输后有问题

  • block (bool) – default=True, 是否阻塞, 如果为True则待队列有空闲空间时放入成功才返回

  • timeout (number) – default=None, 阻塞超时时间, 单位为秒

  • kwargs (**kwargs) – 其他放置参数, 具体参数定义参考具体实现类

引发

queue.Full – 遇到队列无空间放置时, 非阻塞模式直接抛出异常, 阻塞模式超时后抛出异常

put_nowait(item, **kwargs)[源代码]

采取不阻塞的模式将对象放入队列

参数
  • item (object) –

    要放进队列中的对象

    注意: 该对象建议是基础类型, 可序列化, 避免使用MQ等中间件传输后有问题

  • kwargs (**kwargs) – 其他放置参数, 具体参数定义参考具体实现类

引发

queue.Full – 遇到队列无空间放置时, 直接抛出异常

qsize(**kwargs)[源代码]

返回队列长度

参数

kwargs (**kwargs) – 参数, 具体参数定义参考具体实现类

返回

返回当前队列长度

返回类型

int

task_done(**kwargs)[源代码]

任务完成通知, 用于支持生产者消费者模型处理

由消费者线程每获取到一个队列对象, 完成处理后通过task_done通知队列任务完成 队列机制是将队列待执行任务数-1, 以便于join函数判断队列任务是否已全部完成(已无待处理任务)

参数

kwargs (**kwargs) – 参数, 具体参数定义参考具体实现类