Celery不会与RabbitMQ一起使用" - autoreload"选项

时间:2014-09-11 16:15:11

标签: python django rabbitmq celery django-celery

  1. 我不知道是a bug还是配置问题。
  2. 目标:调试/修改Celery任务,而无需在每次进行小幅更改时手动重新启动工作人员
  3. 所以我配置了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开始一项任务。

    这看起来像连接问题,但我不知道它是什么 如果你可以帮忙,请写下来。

1 个答案:

答案 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开发者似乎不愿意在早期解决这个问题。在此之前,您有两种选择:

  1. 更新的任务需要在获取新任务之前执行。

  2. 在更新任务后重启芹菜工作者