我正在运行Django + Celery + RabbitMQ。修改一些任务名称后,我开始收到"未注册的任务"KeyErrors,即使在从 Django Celery Beat 的周期性任务表中删除使用此键的任务并重新启动 Celery worker 之后也是如此。即使在使用 --purge 选项运行后,它们仍然存在。
我怎样才能摆脱它们?
要清除这些任务中的最后一个,您可以使用旧的方法标头重新实现它们,但没有逻辑。
例如,如果您删除了该方法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
在每个环境中运行此版本后,将处理任何剩余的任务(并且不执行任何操作)。确保已将它们从定期任务表中删除,并且不再被调用。然后,可以在下次部署之前删除该方法,并且问题不会再次出现。
这仍然是一种解决方法,最好能够单独查看和删除任务。