概述
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将会重新将任务入队执行。