【问题标题】:Celery doesn't work with RabbitMQ with "--autoreload" optionCelery 不适用于带有“--autoreload”选项的 RabbitMQ
【发布时间】:2014-09-11 16:15:11
【问题描述】:
  1. 不知道是a bug还是配置问题。
  2. 目标: 调试/修改 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 开始一项任务。

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

【问题讨论】:

    标签: python django rabbitmq celery django-celery


    【解决方案1】:

    celery/worker/autoreload.py 第 67 行的 celery 中有一个错误

    此错误修复已提交给大师: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. 更新任务后重启 celery worker

    【讨论】:

      猜你喜欢
      • 2014-07-21
      • 1970-01-01
      • 2018-05-02
      • 1970-01-01
      • 2019-10-17
      • 1970-01-01
      • 1970-01-01
      • 2017-12-25
      • 1970-01-01
      相关资源
      最近更新 更多