我正在使用 Celery 3.1.16 代理(运行 RabbitMQ)和多个 Celery worker 通过主管守护程序化芹菜。问题出在任务更新上。当我更新 tasks.py 文件时,芹菜工人运行旧代码。
芹菜发射命令:
/home/my_project/bin/celery -B --autoreload --app=my_app.celery:app worker --loglevel=INFO
我在 django settings.py 中包含任务文件:
CELERY_IMPORTS = [
'my_app.tasks'
]
pyinotify 已安装并工作(我猜是这样),是芹菜日志的一部分:
[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]
所以,我的问题:如果修改了新任务代码,如何获取芹菜更新并应用新任务代码?
芹菜对这个问题有未解决的问题https://github.com/celery/celery/issues/1025
我也有同样的问题。虽然我不喜欢它,但我执行以下操作,首先删除并编译当前目录下任何位置的 .pyc 文件,然后重新启动所有工作线程。
find . -name "*.pyc" -exec rm {} ;
supervisorctl restart all
--autoreload
旗帜什么都不做似乎很奇怪,但就我而言并非如此。
Celery 只自动重新加载它直接加载的那些模块,它不会关注直接模块加载的其他模块。