轻量级任务队列—Huey(2)

概述

huey是一个轻量级任务队列,它是用Python开发的,仅仅依赖Python的redis客户端。支持以下功能:

1、支持多进程,多线程,协程任务模型

2、支持在给定时间或者给定延迟之后执行任务

3、支持像crontab一样建立周期任务

4、支持失败后自动重试任务

5、支持任务结果存储。

官方文档为:https://huey.readthedocs.io/en/latest/getting-started.html

Huey内部分析

下面我们来分析Huey内部以及Huey源码,这使我们更加清晰Huey的使用。Huey的源码主要集中在comsumer部分。因此,我们主要来看consumer.py的实现。

首先consumer主要有三个部分组成:

1、主要的处理函数

2、调度器

3、执行器(workers)

这三个组件负责接收、调度、以及执行:

1、当你调用一个被huey装饰的函数时,它会将一条消息放入队列。同时,应用将会立即返回一个TaskResultWrapper对象。

2、在消费者进程中,执行者(workers)将会监听新的消息,然后其中一个执行者将会接收你的消息然后指令任务在某个时间,带上某个参数去执行它。

3、在守护进程中,执行者关差消息,并时刻检查他是否被暂停(revoked)或者是否被延迟调度。如果被暂停,该消息就会被丢弃。如果该消息被延迟调度,它讲会加入调度队列。否则会被执行。

4、执行者线程执行任务。如果任务完成,结果将会被发布。如果任务失败,消费者进程将会检查该任务是否被重试。如果任务可以被重试,消费者将检查该任务是否配置了等待时间。依赖这个配置,huey将会重新将任务入队执行。

推荐阅读更多精彩内容