如何摆脱仍在Celery / RabbitMQ队列中的遗留任务?

时间:2017-08-28 13:57:04

标签: django rabbitmq celery django-celery celerybeat

我正在运行Django + Celery + RabbitMQ。在修改了一些任务名称后,我开始获得"未注册的任务" KeyErrors,即使在使用Django Celery Beat中的Periodic任务表中的此键删除任务并重新启动Celery worker之后也是如此。即使在persist之后,他们running with the --purge option

我怎样摆脱它们?

1 个答案:

答案 0 :(得分:1)

要清除最后一项任务,您可以使用旧方法标题重新实现它们,但不能使用逻辑。

例如,如果您删除了方法original并且现在收到错误

[ERROR/MainProcess] Received unregistered task of type u'myapp.tasks.original'

只需重新创建original方法,如下所示:

<强> tasks.py

@shared_task
def original():
    # keep legacy task header so that it is flushed out of queue
    # FIXME: this will be removed in the next release
    pass

在每个环境中运行此版本后,将处理任何剩余的任务(并且不执行任何操作)。确保已从定期任务表中删除它们,并且不再调用它们。然后,您可以在下次部署之前删除该方法,并且该问题不应再发生。

这仍然是一种解决方法,最好能够review and delete the tasks individually