Ответ 1
Просто в темноте, с параметром celeryd --autoreload
вы удостоверились, что у вас есть один из файловых системных бэкэндов? Он рекомендует PyNotify для linux, поэтому я бы начал, убедившись, что у вас это установлено.
Я использую Fabric для развертывания брокера Celery (работает RabbitMQ) и нескольких работников сельдерея с celeryd
, демонизированным через supervisor
. Я не могу на всю жизнь понять, как перезагрузить модуль tasks.py
, не перезагружая серверы.
/etc/supervisor/conf.d/celeryd.conf
[program:celeryd]
directory=/fab-mrv/celeryd
environment=[RABBITMQ crendentials here]
command=xvfb-run celeryd --loglevel=INFO --autoreload
autostart=true
autorestart=true
celeryconfig.py
import os
## Broker settings
BROKER_URL = "amqp://%s:%[email protected]" % (os.environ["RMQU"], os.environ["RMQP"])
# List of modules to import when celery starts.
CELERY_IMPORTS = ("tasks", )
## Using the database to store task state and results.
CELERY_RESULT_BACKEND = "amqp"
CELERYD_POOL_RESTARTS = True
Дополнительная информация
celery --version
3.0.19 (Chiastic Slide)python --version
2.7.3lsb_release -a
Ubuntu 12.04.2 LTSrabbitmqctl status
... 2.7.1...Вот некоторые вещи, которые я пробовал:
celeryd --autoreload
sudo supervisorctl restart celeryd
celery.control.broadcast('pool_restart', arguments={'reload': True})
ps auxww | grep celeryd | grep -v grep | awk '{print $2}' | xargs kill -HUP
И, к сожалению, ничто не заставляет рабочих перезагружать модуль tasks.py(например, после запуска git pull
для обновления файла). Основные функции fab доступны здесь.
Брокеры/рабочие работают нормально после перезагрузки.
Просто в темноте, с параметром celeryd --autoreload
вы удостоверились, что у вас есть один из файловых системных бэкэндов? Он рекомендует PyNotify для linux, поэтому я бы начал, убедившись, что у вас это установлено.