2013-06-04 8 views
14

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.3
  • lsb_release -a Ubuntu 12.04.2 LTS
  • rabbitmqctl status ... 2.7.1 ...

Tutaj ar e pewne rzeczy próbowałem:

  • celeryd --autoreload flag
  • 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

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.

+2

'Restrukturyzacja superwizora' zwykle robi lewę dla mnie. –

+0

Niestety, nie dla mnie. Dodałem sens dla mojego 'fabfile.py' z odpowiednimi funkcjami fab, które zostały wyciągnięte. – pztrick

+0

szerokie zgadywanie tutaj, ale czy próbowałeś usunąć '* .pyc' przed ponownym załadowaniem? –

Odpowiedz

2

Po prostu strzał w ciemność, z opcją celeryd --autoreload czy upewniłeś się, że masz jeden z file system notification backends? Zaleca PyNotify dla Linuksa, więc zacznę od upewnienia się, że masz to zainstalowane.

+1

Bez kości. :('Requiem już spełnione (użyj - upgrade do aktualizacji): pyinotify w/usr/local/lib/python2.7/dist-packages' ** (Wersja 0.9.4) ** – pztrick