【问题标题】:How do I retry a revoked Celery task using AsyncResult如何使用 AsyncResult 重试已撤销的 Celery 任务
【发布时间】:2019-06-27 14:12:22
【问题描述】:

我想使用 AsyncResult 对象重试以前撤销的任务,但我收到一条错误消息,提示我运行该任务后该任务将被丢弃

worker_1 | [2019-06-27 16:04:23,094: INFO/MainProcess] Discarding revoked task: ...

根据docs,被撤销的任务列表由工作器存储在内存中,并且在工作器重新启动之前不会被清除。

是否有另一种方法可以取消正在运行的任务而不是撤销它,或者我可以以某种方式从撤销的任务列表中删除该任务?

【问题讨论】:

  • 为什么不简单地创建一个具有相同参数的新任务呢?那不行吗?
  • 不过,我想重复使用完全相同的任务来更轻松地跟踪它的历史
  • 这没有任何意义。就像你释放了一部分内存,然后想把它带回来一样。 :)

标签: python celery


【解决方案1】:

将被撤销的任务从“死者”中带回来是没有意义的。

我建议你做的是:

  1. 创建一个新任务,其 args 与撤销的任务相同。

  2. 在任务上使用update_state(),并指定可用于关联两个不同任务(撤销的任务和新任务)的元数据。像tsk.update_state(meta={"job-id": "babadeda123", "client-id": "skynet", "previous-task-id": "64fb925e-86cb-4d29-b4e5-33f41f8416cc"}) 这样的东西,其中 64fb925e-86cb-4d29-b4e5-33f41f8416cc 是被撤销任务的 ID。

【讨论】:

    猜你喜欢
    • 2018-02-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-25
    • 2015-05-06
    • 2011-06-19
    • 2016-10-21
    • 2014-07-10
    相关资源
    最近更新 更多