- 不知道是不是a bug或配置问题。
- 目标调试/修改 Celery 任务,而无需在我每次进行小改动时手动重启 worker
所以我已经配置了 Celery+RabbitMQ。一切正常。
向 celery -A proj worker --loglevel=debug
命令添加了 --autoreload
选项,日志记录在此停止:
[2014-09-11 19:22:00,447: DEBUG/MainProcess] | Worker: Hub.register Autoreloader...
没有它:
[2014-09-11 19:37:34,316: DEBUG/MainProcess] | Worker: Hub.register Pool...
[2014-09-11 19:37:34,317: DEBUG/MainProcess] basic.qos: prefetch_count->16
[2014-09-11 19:37:36,275: DEBUG/MainProcess] pidbox received method enable_events() [reply_to:None ticket:None]
[2014-09-11 19:37:36,275: INFO/MainProcess] Events of group {task} enabled by remote.
其他一切正常。 RabbitMQ 收到消息后
celery call tasks.update
有来自 Celery 的连接。它只是不告诉 celery 开始任务。
看起来像是连接问题,但我不知道它是什么。
如果您能提供帮助,请写信。
最佳答案
celery/worker/autoreload.py 第 67 行有一个 bug
此错误修复已提交给 master:https://github.com/pashinin/celery/commit/92b52db6eeeb75494700ffe807ecd4c1fe6b0643
您可以通过更改 autoreload.py 的第 67 行来修补库
for chunk in iter(lambda: f.read(2 ** 20), ''):
到
for chunk in iter(lambda: f.read(2 ** 20), b''):
此更改后,您可能仍会面临另一个问题:如果您已经创建了一个任务,则不会重新创建该任务,并且该任务在模块重新加载后也不会更新。重新加载的任务只有在您再次执行它们后才会激活。
Celery 开发人员似乎并不愿意尽早解决这个问题。在那之前,您有两个选择:
需要在拾取新任务之前执行更新的任务。
更新任务后重启 celery worker
关于python - Celery 不适用于带有 "--autoreload"选项的 RabbitMQ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25792396/