【问题标题】:Status of Python Celery tasksPython Celery 任务的状态
【发布时间】:2014-06-13 07:16:32
【问题描述】:

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

我当前的应用程序堆栈是一个在 twisted 内部运行的烧瓶应用程序,使用 celery 运行数十到数千个小型后台任务(更新存储库中的元数据,创建图像衍生品等)我正在设想使用 ajax 长轮询来监控用户发起的celery任务的状态。我正在使用 redis 作为后端代理和结果。

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

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

任何建议将不胜感激。花了很多时间才把事情写得这么远,但我正在转动我的轮子,弄清楚究竟什么要从用户前端进行长轮询。

【问题讨论】:

    标签: python redis flask celery long-polling


    【解决方案1】:

    试试 Jobstatic,它正在扩展 Celery。

    来自项目描述:

    Jobtastic 给你一些好东西,比如:

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

    【讨论】:

    • 这看起来非常有希望,与项目页面上提到的 jquery-celery 相同。基于此,“如果您使用 Flask 而不是 Django,那么当前唯一支持使用 Jobtastic 的方式是使用 Memcached 作为您的 CELERY_RESULT_BACKEND”,听起来我可能需要使用 Memcached 而不是 Redis 来获得结果?不管怎样,很有希望,谢谢你的建议。
    【解决方案2】:

    Jobtastic 是个好主意,但对我们来说并不完全奏效。最后,决定创建一个递增的作业编号(与结果和代理一起存储在 Redis 中),将与该作业编号关联的所有 celery 任务 id 推送到 python 对象中,然后将其腌制并存储在 redis 中。然后我们可以稍后使用它来查看整个“作业”是否已完成或其状态。就我们的目的而言,效果很好。

    【讨论】:

      猜你喜欢
      • 2012-02-11
      • 2016-10-30
      • 1970-01-01
      • 2018-05-18
      • 2012-02-20
      • 2019-05-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多