huey,一个轻量级的任务队列
项目描述
一种轻量级替代方案.
huey是
huey支持
多进程、多线程或greenlet任务执行模型
安排任务在指定时间或延迟后执行
安排周期性任务,如crontab
自动重试失败的任务
任务优先级
任务结果存储
任务过期
任务锁定
任务管道和链
速览
from huey import RedisHuey, crontab
huey = RedisHuey('my-app', host='redis.myapp.com')
@huey.task()
def add_numbers(a, b):
return a + b
@huey.task(retries=2, retry_delay=60)
def flaky_task(url):
# This task might fail, in which case it will be retried up to 2 times
# with a delay of 60s between retries.
return this_might_fail(url)
@huey.periodic_task(crontab(minute='0', hour='3'))
def nightly_backup():
sync_all_data()
调用装饰了task的函数将函数调用入队以供消费者执行。立即返回一个特殊的结果句柄,可以在任务完成后使用它来获取结果
>>> from demo import add_numbers
>>> res = add_numbers(1, 2)
>>> res
<Result: task 6b6f36fc-da0d-4069-b46c-c0d4ccff1df6>
>>> res()
3
可以安排任务在将来运行
>>> res = add_numbers.schedule((2, 3), delay=10) # Will be run in ~10s.
>>> res(blocking=True) # Will block until task finishes, in ~10s.
5
运行消费者
使用四个工作进程运行消费者
$ huey_consumer.py my_app.huey -k process -w 4
以单个工作线程运行消费者(默认)
$ huey_consumer.py my_app.huey
如果您的负载主要是I/O密集型,则可以使用线程或greenlets来运行消费者。由于greenlets非常轻量级,因此可以有效地运行相当多的它们
$ huey_consumer.py my_app.huey -k greenlet -w 32
存储
Huey 的设计和功能集合受到了 Redis 数据库的功能启发。对于像 Huey 这样的轻量级任务队列库,Redis 是一个完美的选择:它是一个独立的、多功能的解决方案,可以用于其他网络应用程序任务,如缓存、事件发布、分析、速率限制等。
虽然Huey的设计初衷是考虑到Redis,但存储系统实现了一个简单的API,如果需要,可以使用其他工具替代Redis。
Huey内置了对Redis、Sqlite和内存存储的支持。
文档
项目页面
Huey的名字是为了纪念我的猫