所以我配置了Celery + RabbitMQ。一切正常。
在--autoreload
命令中添加celery -A proj worker --loglevel=debug
选项,并在此处停止记录:
[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开始一项任务。
这看起来像连接问题,但我不知道它是什么 如果你可以帮忙,请写下来。
答案 0 :(得分:1)
celery / worker / autoreload.py第67行芹菜中有一个错误
此错误修复已提交给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开发者似乎不愿意在早期解决这个问题。在此之前,您有两种选择:
更新的任务需要在获取新任务之前执行。
在更新任务后重启芹菜工作者