2014-12-16 26 views
9

Utilizzo il broker di Celery 3.1.16 (con RabbitMQ) e più operatori di Celery con il celeryd daemonizzato tramite supervisore. Il problema è con l'aggiornamento delle attività. Quando aggiorno il mio file tasks.py, il gestore di sedici esegue il vecchio codice.Autoeload sedano non funzionante

Sedano comando di lancio:

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

includo file di compiti in django settings.py:

CELERY_IMPORTS = [ 
    'my_app.tasks' 
] 

pyinotify è installato e le opere (Credo di sì), che fa parte di tronchi di sedano:

[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] 

Quindi, la mia domanda: come ottenere l'aggiornamento di sedano e applicare il nuovo codice di attività, se sono state modificate?

+0

Non ho una risposta. Riavvio ancora i miei lavoratori quando eseguo un push del codice. http://stackoverflow.com/questions/16929264/how-can-i-automatically-reload-tasks-modules-with-celery-daemon – pztrick

+0

Lo stesso qui. Riavvia il sedano alla fine della procedura di distribuzione. La distribuzione viene effettuata utilizzando il tessuto per questo. –

+0

Ciao LJ, eventuali aggiornamenti su questa domanda? Eri in grado di capire? – Desprit

risposta

1

Ho lo stesso problema. Anche se non mi piace, faccio quanto segue, che prima rimuove e compila i file .pyc ovunque nella mia directory corrente, quindi riavvia tutti i lavoratori. find . -name "*.pyc" -exec rm {} \; supervisorctl restart all Sembra strano che il flag --autoreload non faccia nulla, ma non nel mio caso.

1

Celery carica automaticamente solo quei moduli che ha caricato direttamente, non tiene d'occhio altri moduli caricati dai moduli diretti.