芹菜自动重载不起作用

Posted

技术标签:

【中文标题】芹菜自动重载不起作用【英文标题】:Celery autoreload not working 【发布时间】:2015-02-15 03:23:55 【问题描述】:

我正在使用 Celery 3.1.16 代理(运行 RabbitMQ)和多个 Celery 工作人员,其中 celeryd 通过主管进行了守护。问题在于任务更新。当我更新我的 tasks.py 文件时,celery worker 运行旧代码。

Celery 启动命令:

/home/my_project/bin/celery -B --autoreload --app=my_app.celery:app worker --loglevel=INFO

我在 django settings.py 中包含任务文件:

CELERY_IMPORTS = [
    'my_app.tasks'
]

pyinotify 已安装并且可以工作(我猜是这样),它是 celery 日志的一部分:

[2014-12-16 20:56:00,016: INFO/MainProcess] Task my_app.tasks.periodic_update_task_statistic[175c2557-7c07-43c3-ac70-f4e115344134] succeeded in 0.00816309102811s: 'ok!'
[2014-12-16 20:56:11,157: INFO/MainProcess] Detected modified modules: ['my_app.tasks']
[2014-12-16 20:57:00,001: INFO/Beat] Scheduler: Sending due task my_app.tasks.periodic_update_task_statistic (my_app.tasks.periodic_update_task_statistic)
[2014-12-16 20:57:00,007: INFO/MainProcess] Received task: my_app.tasks.periodic_update_task_statistic[f22998a9-dcb4-4c29-8086-86dd6e57eae1]

那么,我的问题是:如何获取 celery 更新并应用新的任务代码,如果它们被修改了?

【问题讨论】:

我没有答案。当我进行代码推送时,我仍然只是重新启动我的工作人员。 ***.com/questions/16929264/… 这里也一样。我在部署过程结束时重新启动 celery。部署是使用结构完成的。 嗨 LJ,这个问题有什么更新吗?你能弄清楚吗? 我在 docker 中使用 supervisor 进行本地开发,但我也不知道如何使 --autoreload 工作。 【参考方案1】:

我也有同样的问题。虽然我不喜欢它,但我执行以下操作,首先删除并编译当前目录下任何位置的 .pyc 文件,然后重新启动所有工作人员。 find . -name "*.pyc" -exec rm \; supervisorctl restart all --autoreload 标志什么都不做似乎很奇怪,但在我的情况下它没有。

【讨论】:

【参考方案2】:

Celery 只会自动重新加载它直接加载的那些模块,它不会关注由直接模块加载的其他模块。

【讨论】:

【参考方案3】:

Celery 对此问题有未解决的问题 https://github.com/celery/celery/issues/1025

【讨论】:

以上是关于芹菜自动重载不起作用的主要内容,如果未能解决你的问题,请参考以下文章

芹菜不起作用:无法连接到 amqp://guest:**@127.0.0.1:5672//

Laravel 8 jetstream 热重载和浏览器同步不起作用

Webpack:热重载不起作用,但更改编译

打字稿重载箭头功能不起作用

颤振热重载和热重启不起作用

颤振热重载不起作用。需要帮助