flask+celery 任务状态查看与删除
前言
写这个的原因是网上关于celery+flask
操作的很多博客大多停留在delay
添加异步任务的阶段,但是对于任务状态的查看和卡顿任务的删除进行讲解的却很少,即便有,很多也是关于django
的,对于flask
操作人员不太友好
所以在这篇博客中会以最简的方式实现这两个功能
环境
celery
,redis
,flask
,python3
操作系统 windows10
注册celery实例
任务状态查看
celery
的broker
由redis
担任
使用state
来存储任务的状态,celery
的内置状态有:
参数 | 说明 |
---|---|
PENDING | 任务等待中 |
STARTED | 任务已开始 |
SUCCESS | 任务执行成功 |
FAILURE | 任务执行失败 |
RETRY | 任务将被重试 |
REVOKED | 任务取消 |
PROGRESS | 任务进行中 |
当然我们也可以自定义相关的状态,将状态以不同的样式显示出来
想要获取到任务执行的状态,我们需要先将celery
的任务进行绑定
任务绑定到实例获取到任务的上下文,我们就可以在任务运行时候获取到任务的状态,记录相关日志等
如何进行任务绑定,给任务添加bind=True
参数,如下
添加了bind
参数之后,函数的参数发生变化, 多出了参数 self, 这这相当于把 scanIndex
变成了一个已绑定的方法, 通过 self
可以获得任务的上下文
我们先使用delay
创建任务
delay
会返回给我们一个AsyncResult
实例,不管什么时候,我们都可以通过返回的实例的task_id
从redis
查找执行的结果,比如你在执行一个任务,你可以设置一个周期性轮询,去查看这个结果是否已经被生产出来,如果生产出来便取到该值做相应的操作即可。
我们只需要及时将这个task_id
存储起来即可,这样方便我们后面进行任务查看
这里我使用mysql
进行任务信息的存储
task
表结构为:
其中tid
为任务task_id
,state
为任务的状态,初始化任务后状态手动设置为PENDING
接着在我们的程序逻辑中,每到一个状态就修改任务的状态
比如,任务开始执行之后,进入执行函数,就将任务状态修改为PROGRESS
这里的self
是因为在任务绑定后的celery
任务中,update_state
方法用于更新状态
当用户在前端进行任务状态查看的时候,就先将mysql
中的每一个tid
取出来,到redis
里面去查看任务状态,并更新到mysql
中,再将新的任务状态显示在页面上即可
前端页面的显示可以使用不同的颜色来表示不同的状态
使用css
以不同的颜色以区分,更能够快速查看出错和失效的任务
任务删除
任务删除比任务状态查看更简单,我们开始任务后先到redis
里面看看任务执行之后是什么样子的
而后面的ac453fe5-e1c2-43b8-a923-dd4e8df9702a
正是任务task_id
所以我们只需要进行简单的字符串拼接,可以获取到任务在redis
里面的全称了,接着在python
里面使用
进行删除,r
是redis
的一个链接实例
mysql
里面的对应任务已经产生的数据也用类似的方法,通过tid
来进行查询删除即可
达到删除celery
任务的效果
参考链接
- https://www.celerycn.io/yong-hu-zhi-nan/ren-wu-tasks/zhuang-tai-states
- https://www.cnblogs.com/wdliu/p/9517535.html
- https://www.pyfdtic.com/2018/03/16/python-celery-%E4%BB%BB%E5%8A%A1%E9%98%9F%E5%88%97/
END
建了一个微信的安全交流群,欢迎添加我微信备注进群
,一起来聊天吹水哇,以及一个会发布安全相关内容的公众号,欢迎关注 😃
__EOF__

本文链接:https://www.cnblogs.com/Cl0ud/p/15322476.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!