【问题标题】:How to delete tasks from celery task queue?如何从 celery 任务队列中删除任务?
【发布时间】:2013-11-20 16:33:54
【问题描述】:

如何在任务结束后立即删除队列中的所有任务?

我想要这样的东西 (Deleting all pending tasks in celery / rabbitmq) 但对于 celery 3.0.

谢谢

编辑:

来自 celery 文档: http://docs.celeryproject.org/en/latest/faq.html#how-do-i-purge-all-waiting-tasks

我的代码如下:

从 celery 导入 current_app 作为 celery

@task
def task_a():
    celery.control.purge()

我期待,如果我发出 5 个任务,那么只有第一个会运行。不知何故,我不这样做。

谢谢

【问题讨论】:

  • 我认为您提供的答案中的第二个解决方案 discard_all 可以吗?
  • 它不适用于 celery 3.0。

标签: python django task celery


【解决方案1】:

这些任务可能已经被工作人员预取。要确定是这样,请尝试运行的任务数量超过活动工作人员乘以预取乘数(见下文),并检查celery.control.purge() 返回的结果。您可以使用配置参数CELERYD_PREFETCH_MULTIPLIERCELERY_ACKS_LATE 控制预取任务的数量。

【讨论】:

  • 你说的是真的。当我调用 purge() 时,任务不会被删除。谢谢