首页
学习
活动
专区
圈层
工具
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Huey,轻量级任务队列的温暖选择!

有时候代码不想等,越等越急。定时任务、异步任务、后台处理,谁都想轻装上阵。偏偏Celery太重,APScheduler又太单一,Huey就像一碗热汤,刚刚好堵住了程序的“饿”。今天来聊聊这个叫Huey的小玩意,怎么用,怎么玩,怎么把它装进你的Python小宇宙。

任务队列到底是啥

说白了,任务队列就是让你的代码可以“先记账,后结算”。举个栗子,用户上传个文件,后台要做图片压缩,还要发邮件通知。直接写死在请求流程里?那用户体验分分钟炸锅。任务队列帮你做的,就是把“重活儿”丢到后台,主流程先把“轻活儿”干完,剩下慢慢处理。

Huey就是这样一个“小巧又能干”的任务队列。支持延迟任务定时任务,还能让你玩花活,比如重试、失败回调、任务依赖。依赖Redis或sqlite,配置轻松,跑起来比Celery省心多了。

温馨提示:Huey不是大杀器,别指望它顶住百万级并发。适合个人项目、中小网站,轻松日常用用就挺舒服。

快速上手,三下五除二

装包嘛,pip搞定:

pip install huey

最核心的东西,Huey实例。你可以用Redis,也可以用sqlite做存储。举个最简单的Redis例子:

from huey import RedisHuey

huey = RedisHuey('my_app')

注册一个任务,和写普通函数差不多。只要加个装饰器@huey.task,就OK了:

@huey.task()

def add(a, b):

return a + b

任务派发很丝滑:

result = add(3, 5)

print(result) # 这时候拿到的不是8,而是个PendingResult对象

要结果?等会儿:

print(result.get()) # 终于是8了,不熬夜

温馨提示:直接调用函数就同步执行了,只有像add(3, 5)这样,才算“丢到队列里”。别手贱直接add.__call__(),不然任务就没进队列。

定时任务和延迟任务,时间的魔术师

Huey玩定时任务也很溜。比如,每天凌晨1点发报告,就像闹钟一样:

from huey import crontab

@huey.periodic_task(crontab(hour=1, minute=0))

def send_report():

print(“发送日报,老板别催了!”)

还可以指定延迟多久执行:

@huey.task()

def remind(name):

print(f“{name},喝水时间到啦!”)

remind.schedule((“小明”,), delay=60) # 60秒后提醒

实际场景?比如用户注册后,10分钟发个欢迎邮件,别让人觉得冷冰冰。或者网站高峰期过了再做数据统计,省资源。

温馨提示:定时任务千万别写死在主业务逻辑里,和业务代码解耦,维护起来省心。

异步执行,解放主线程

同步执行等结果,像等外卖师傅,心急。异步下单,自己干别的,等饭到了再通知你。Huey的任务天生异步,配合result.get()可以随时查进度。比如:

@huey.task()

def long_job():

import time

time.sleep(10)

return “慢慢来,别催”

res = long_job()

print(“任务已提交,先摸会儿鱼”)

print(res.get()) # 10秒后才有结果

还能设置超时时间,别等到天荒地老:

try:

print(res.get(timeout=3)) # 最多等3秒

except Exception as e:

print(“等不到,算了”, e)

温馨提示:任务执行慢,别指望同步等。合理设计异步流程,别让用户干瞪眼。

失败重试和异常处理,稳得一批

网络波动、临时出错,任务失败是常有的事。Huey支持自动重试,让任务不容易“掉队”:

@huey.task(retries=3, retry_delay=5)

def sometimes_fail():

import random

if random.choice([True, False]):

raise Exception(“今天运气不好”)

return “成功啦”

每次失败会等5秒,再来一次,最多试3次。适合偶发的网络任务、第三方接口调用。

还可以捕获异常,不让整个队列崩掉。比如写个日志、发个通知,留个后手。

温馨提示:不要滥用重试。遇到致命错误,劝它别再坚持了,早点放弃也是一种美德。

跑起来,worker进程不能少

任务都塞队列里了,总得有个“工人”把活儿干了。Huey自带worker,命令行一条龙:

huey_consumer.py your_module.huey

your_module是你写huey实例的地方。worker会自动监听任务队列,有活就干,没活就摸鱼。支持多进程,多线程,配置都挺灵活。

温馨提示:开发环境记得手动启动worker。直接在脚本里跑任务,worker没开,也只能干瞪眼。

一些小误区和偷懒技巧

Huey和Flask、FastAPI配合超棒,用于邮件、短信、图片处理等异步场景。

别把大文件、复杂对象直接塞任务参数里,队列通信靠pickle,体积大了容易炸锅。

任务里别用全局变量,worker进程各自为政,数据隔离,别指望互通有无。

调试任务可以开debug模式,日志全都有,排查起来不迷路。

想省事就用sqlite做本地队列,小项目足够用,缺点是多机分布式不顶用。

Huey用起来非常平滑,像一只猫,安静但靠谱。适合对任务队列没那么高需求的人,省事不折腾。记住,轻量才有温度,别总想着一口气吃成胖子,代码和生活都一样,慢慢来,别急。

点赞分享

让钱和爱流向你

  • 发表于:
  • 原文链接https://page.om.qq.com/page/O6bmu8cyk2iGbt9VtF3bW7FQ0
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券