2012-10-15 11 views

risposta

66

Hai provato a eseguire l'operazione dalla shell Django? È possibile utilizzare il metodo .apply di un'attività per assicurarsi che venga eseguito con entusiasmo e localmente.

Assumendo il compito è chiamato my_task in Django app myapp in un tasks sottomodulo:

$ python manage.py shell 
>>> from myapp.tasks import my_task 
>>> eager_result = my_task.apply() 

L'istanza risultato ha la stessa API come il solito AsyncResult tipo, tranne che il risultato è sempre valutata avidamente e localmente e il metodo .apply() verrà bloccato finché l'attività non verrà eseguita fino al completamento.

+0

Come posso fare lo stesso per il progetto piramidale? La struttura di directory sarà come: /myproject => celeryconfig.py, setup.py, development.py, /views/celerytasks => mycelerytask.py .Ora qui voglio correre 'mycelerytask. py '(che è un'attività periodica) manualmente dalla riga di comando. Puoi aiutare? – Workonphp

+0

@Workonphp Purtroppo non conosco Pyramid, quindi non so come il Celery si integri con Pyramid. (Nota che la mia soluzione di cui sopra è specifica per Django, che richiede lo script 'manage.py' che Django genera in tutte le directory del progetto Django.) Scusa. –

5

Penso che sarà necessario aprire due shell: una per eseguire le attività dalla shell Python/Django e una per eseguire celery worker (python manage.py celery worker). E come la risposta precedente ha detto, è possibile eseguire attività utilizzando apply() o apply_async()

Ho modificato la risposta in modo da non utilizzare un comando deprecato.

+1

manage.py celeryd è ora deprecato: http://stackoverflow.com/a/23921568/1459594 – rschwieb

Problemi correlati