python - Celery 不适用于带有 "--autoreload"选项的 RabbitMQ

标签 python django rabbitmq celery django-celery

  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 开始任务。

看起来像是连接问题,但我不知道它是什么。
如果您能提供帮助,请写信。

最佳答案

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 开发人员似乎并不愿意尽早解决这个问题。在那之前,您有两个选择:

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

  2. 更新任务后重启 celery worker

关于python - Celery 不适用于带有 "--autoreload"选项的 RabbitMQ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25792396/

相关文章:

python - DataFrame.corr() - 使用相同的重复数据计算 PIL 逊线性相关性?

django dumpdata => 在 heroku 上加载

java - RabbitMQ 推迟接收

jquery - 如何在 Django/Wagtail 中检索 cookie 以设置 Python 变量

python - 在 Django 中构建动态表单

terminal - RabbitMQ 服务器错误

rabbitmq - 消息、队列和交换器有哪些限制?

python - Python 中的对数不准确

python - 如何将一列的值与数据框中的另一列匹配

python - OpenCV python 的 API : FlannBasedMatcher