Python Celery任务的状态

时间:2014-04-27 21:34:36

标签: python redis flask celery long-polling

我想知道在将celery任务部署到工作人员后,从浏览器监控芹菜任务有哪些选项?

我目前的应用程序堆栈是一个在扭曲的内部运行的烧瓶应用程序,使用芹菜运行数十到数千个小的后台任务(更新存储库中的元数据,创建图像衍生物等)我正在设想使用ajax长轮询监视用户发起的芹菜任务的状态。我正在使用redis作为后端经纪人和结果。

我看到芹菜有一些命令行方式来监控任务,或者flower用于Web仪表板。但是,如果我想从发送到芹菜的特定任务中看到更详细的状态,那么打印/写入日志文件对该任务更有意义,然后对该文件进行长时间轮询,以便从烧瓶前端进行更改吗? / p>

此时用户可以说“更新这10,000个项目”,任务被发送到芹菜,前端很快就会说“工作发送!”。任务完成了。但我想让用户导航到“/ status”并查看这10,000个小作业的状态 - 即使滚动日志文件也可能有效。

任何建议都将不胜感激。花了很多时间才把它做成了这么简单的草图,但是我正在旋转我的轮子,确定 WHAT 从用户前端进行长时间的轮询。

2 个答案:

答案 0 :(得分:4)

尝试Jobstatic,它正在扩展Celery。

来自项目说明:

Jobtastic为您提供以下好处:

  • 轻松进度估算/报告
  • 工作状态反馈
  • 帮助优雅处理死任务代理的方法(delay_or_eager和delay_or_fail)
  • 超级简单的结果缓存
  • 雷鸣般的避让
  • 与celery jQuery插件集成,便于客户端进度显示
  • 任务运行中的内存泄漏检测

答案 1 :(得分:1)

Jobtastic是一个好主意,但不是很适合我们的。最后,决定创建一个递增的作业号(存储在Redis中以及结果和代理),将与该作业号相关联的所有芹菜任务ID推送到python对象中,然后将其腌制并以redis形式存储。然后我们可以使用它来查看整个"工作"已完成,或其状态。为了我们的目的,工作很可爱。