Używam Fabric do wdrożenia brokera selera (z uruchomionym RabbitMQ) i wielu pracowników do selera z celeryd
zesynchronizowanych poprzez supervisor
. Nie mogę do końca życia dowiedzieć się, jak przeładować moduł tasks.py
, nie powodując restartu serwerów.Jak mogę automatycznie ładować moduły zadań za pomocą demona Celery?
/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
Dodatkowe informacje
celery --version
3.0.19 (Chiastic slajdów)python --version
2.7.3lsb_release -a
Ubuntu 12.04.2 LTSrabbitmqctl status
... 2.7.1 ...
Tutaj ar e pewne rzeczy próbowałem:
celeryd --autoreload
flagsudo supervisorctl restart celeryd
celery.control.broadcast('pool_restart', arguments={'reload': True})
ps auxww | grep celeryd | grep -v grep | awk '{print $2}' | xargs kill -HUP
I niestety, nic nie powoduje robotników przeładować moduł tasks.py (na przykład po uruchomieniu git pull
, aby zaktualizować plik). Istota odpowiednich funkcji fab jest dostępna here.
Brokerzy/pracownicy działają poprawnie po ponownym uruchomieniu komputera.
'Restrukturyzacja superwizora' zwykle robi lewę dla mnie. –
Niestety, nie dla mnie. Dodałem sens dla mojego 'fabfile.py' z odpowiednimi funkcjami fab, które zostały wyciągnięte. – pztrick
szerokie zgadywanie tutaj, ale czy próbowałeś usunąć '* .pyc' przed ponownym załadowaniem? –