2

我通过在终端中执行以下命令来启动工作者:

celery -A cel_test  worker --loglevel=INFO --concurrency=10 -n worker1.%h

然后我收到一条长的循环错误消息,指出 celery 已收到未注册的任务并已触发:

KeyError: 'cel_test.grp_all_w_codes.mk_dct' #this is the name of the task

这个问题是cel_test.grp_all_w_codes.mk_dct不存在的。事实上,甚至没有一个模块cel_test.grp_all_w_codes,更不用说任务了mk_dct。几天前有一次,但后来我删除了它。我想也许有一个.pyc文件浮动,但没有。我在我的代码中也找不到对引发错误的任务的单个引用。我关闭了我的计算机并重新启动了 rabbitmq 服务器,我想也许对某些东西的引用只是卡在了内存中,但这并没有帮助。

有谁知道这里可能是什么问题或我错过了什么?

4

1 回答 1

4

好吧,在不知道您的 conf 文件的情况下,我可以看到两个会引起这种情况的原因:

  • 当您停止工作人员并删除模块时,mk_dct任务未完成。如果您使用 运行CELERY_ACKS_LATE,它会在您每次重新运行工作程序时尝试重新启动任务。尝试删除此设置,或使用清除选项启动工作程序。

celery -A cel_test worker --loglevel=INFO --concurrency=10 -n worker1.%h --purge

  • mk_dct任务由您的 celery beat 启动。如果是这样,请尝试重新启动 celery beat 并清除它的数据库后端(如果您有自定义后端)。

如果它不能解决问题,请发布您的 celery conf,并确保您已清理所有.pyc项目并重新启动所有内容。

于 2014-07-22T16:43:41.403 回答