【问题标题】:Celery task history芹菜任务历史
【发布时间】:2016-03-01 15:32:57
【问题描述】:

我正在 Celery 框架之上构建一个用于执行任务的框架。

我想查看最近执行的任务列表(最近 2-7 天)。

查看 API 我可以找到 app.backend 对象,但不知道如何进行查询以获取任务。

例如,我可以使用 Redis 或数据库等后端。我不想将 SQL 查询显式写入数据库。

有没有办法使用 API 处理任务历史记录/结果?

我尝试使用Flower,但它只能处理事件,无法获取启动前的历史记录。

【问题讨论】:

  • 查看 django-celery,我认为它已经为任务提供了管理员
  • 看来你可能是对的。我不想在这个项目中使用 django,但我可能需要 djcelery 提供的相同功能。

标签: python celery flower


【解决方案1】:

你可以使用persistent选项,例如:flower -A ctq.celery --persistent=True

【讨论】:

  • 为什么会被否决?这似乎是合理的。投反对票的人请澄清,因为我想知道为什么这是一个坏主意。
  • 这主意不错。投反对票是因为我用的是中文! 23333
【解决方案2】:

您需要将任务结果保存在后端,例如 Redis。 Celery 文档在此处包含有关如何执行此操作的信息:

http://docs.celeryproject.org/en/latest/getting-started/first-steps-with-celery.html#keeping-results

您还想设置CELERY_TASK_RESULT_EXPIRES 配置参数,因为默认情况下会在一天后丢弃结果。

如果您这样做,Flower 将向您显示任务执行的历史记录,无论从何时开始。

【讨论】:

  • 是的,我尝试过这种方式,但它不起作用。这就是我问的原因。在 Flower 的资料中,我发现它仅适用于事件。使用后端 api 可以获得过去任务的结果,但只知道它的 ID。 djcelery 可能最适合我的需求。
  • @Kapucko,我留下了一个用芹菜解决这个问题的想法。当任务开始时,我会在数据库中创建一条新记录。我终于把项目切换到了 django。
  • @baldr 感谢您的回复。您能告诉我 django 在这种情况下提供了哪些优势吗?
  • @Kapucko,不仅是这种情况,而且我更喜欢 Django 的灵活性,而且我喜欢它的项目结构。使用模型和迁移管理数据库非常成熟且容易。
  • 只是想指出 Celery 从 4.0 版开始引入了新的小写设置,因此 CELERY_TASK_RESULT_EXPIRES 现在配置为 result_expires
猜你喜欢
  • 2014-12-04
  • 1970-01-01
  • 2012-12-01
  • 2014-04-16
  • 2018-07-04
  • 2012-08-30
  • 2011-11-20
  • 2017-10-14
  • 1970-01-01
相关资源
最近更新 更多