2011-12-08 23 views
11

Próbuję użyć Django seler w moim projekciedjango-seler: No wynik backend skonfigurowany

W settings.py mam

CELERY_RESULT_BACKEND = "amqp" 

Serwer rozpoczął w porządku

python manage.py celeryd --setting=settings 

Ale jeśli chcę uzyskać dostęp do wyniku z opóźnionego zadania, pojawia się następujący błąd:

Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "C:\Python27\lib\site-packages\celery\result.py", line 108, in ready 
    return self.status in self.backend.READY_STATES 
    File "C:\Python27\lib\site-packages\celery\result.py", line 196, in status 
    return self.state 
    File "C:\Python27\lib\site-packages\celery\result.py", line 191, in state 
    return self.backend.get_status(self.task_id) 
    File "C:\Python27\lib\site-packages\celery\backends\base.py", line 404, in _is 
_disabled 
    raise NotImplementedError("No result backend configured. " 
NotImplementedError: No result backend configured. Please see the documentation 
for more information. 

To jest bardzo dziwne, ponieważ kiedy po prostu uruchamiam selera (z tymi samymi ustawieniami selera), działa dobrze. Czy ktoś wcześniej napotkał ten problem?

Z góry dziękuję!

Odpowiedz

0

Niektóre ustawienia konsoli wymagają ustawienia środowiska django w celu pobrania ustawień. Na przykład w PyCharm można uruchomić konsolę django, w której wszystko działa zgodnie z oczekiwaniami.

4

miałem ten sam problem przy pobieraniu wynik z powrotem z zadania selera, chociaż zadanie selera zostało wykonane (logi konsoli). Co znalazłem, miałem to samo ustawienie CELERY_RESULT_BACKEND = "redis" w Django settings.py ale miałem też instancja seler w tasks.py

celery = Celery('tasks', broker='redis://localhost') - co przypuszczam Przesłania właściwość settings.py i dlatego nie był konfigurowany backend serwer dla mojej instancji selera, która służy do przechowywania wyników.

Usunąłem to i pozwoliłem django uzyskać selera uzyskać właściwości z settings.py i przykładowy kod pracował dla mnie.

1

Dla tych, którzy desperacko poszukują rozwiązania takiego jak ja.

Umieść ten wiersz na końcu skryptu settings.py:

djcelery.setup_loader() 

Wygląda Django selera nie zamierza rozważyć swoje własne ustawienia bez ścisłej kolejności.

0

Zobacz AMQP BACKEND SETTINGS dla lepszego zrozumienia

Note The AMQP backend requires RabbitMQ 1.1.0 or higher to automatically expire results. If you are running an older version of RabbitMQ you should disable result expiration like this: CELERY_TASK_RESULT_EXPIRES = None

spróbuj dodać poniższy wiersz do settings.py:

CELERY_TASK_RESULT_EXPIRES = 18000 # 5 hours

0

w moim przypadku, problemem było to, że mijał argument CELERY_RESULT_BACKEND do konstruktora selera:

Celery('proj', 
     broker = 'amqp://guest:[email protected]:5672//', 
     CELERY_RESULT_BACKEND='amqp://', 
     include=['proj.tasks']) 

Rozwiązaniem było użycie argumentu backend:

Celery('proj', 
     broker = 'amqp://guest:[email protected]:5672//', 
     backend='amqp://', 
     include=['proj.tasks'])