UDATE3: Znalazłem problem. Zobacz odpowiedź poniżej.Samouczek Django Seler nie zwraca wyników
Update2: Wydaje mi może do czynienia z automatycznego nazywania i względną importu problemu uruchamiając samouczek djcelery przez manage.py shell, patrz poniżej. Nadal nie działa dla mnie, ale teraz otrzymuję nowe komunikaty o błędach dziennika. Zobacz poniżej.
AKTUALIZACJA: Dodałem dziennik u dołu postu. Wydaje się, że przykładowe zadanie nie jest zarejestrowane?
Original post:
Próbuję uzyskać Django seler uruchomiony. Nie mogłem przejść przez przykład.
zainstalowałem RabbitMQ i pomyślnie przeszedł samouczków bez kłopotów: http://www.rabbitmq.com/getstarted.html
Potem próbował przejść przez samouczek djcelery.
Kiedy biegnę python manage.py celeryd -l info
dostaję komunikat: [Zadania] - app.module.add [2011-07-27 21:17:19, 990: OSTRZEŻENIE/MainProcess] seler @ Sequoia rozpoczęła.
To wygląda dobrze. Ja to na szczycie moich ustawieniach pliku:
import djcelery
djcelery.setup_loader()
BROKER_HOST = "localhost"
BROKER_PORT = 5672
BROKER_USER = "guest"
BROKER_PASSWORD = "guest"
BROKER_VHOST = "/"
dodaje je do moich zainstalowanych aplikacji:
'djcelery',
tutaj jest mój plik tasks.py w folderze Zadania mojego app:
from celery.task import task
@task()
def add(x, y):
return x + y
dodałem to do mojego pliku django.wsgi:
os.environ["CELERY_LOADER"] = "django"
Potem wszedłem to w wierszu poleceń:
>>> from app.module.tasks import add
>>> result = add.delay(4,4)
>>> result
(AsyncResult: 7auathu945gry48- a bunch of stuff)
>>> result.ready()
False
Więc wygląda na to działało, ale tutaj jest problem:
>>> result.result
>>> (nothing is returned)
>>> result.get()
Kiedy kładę w result.get() to po prostu wisi. Co ja robię źle?
UPDATE: To właśnie uruchomiony rejestrator w planie mówi, kiedy uruchomić serwer pracownika:
No handlers could be found for logger “multiprocessing”
[Configuration]
- broker: amqplib://[email protected]:5672/
- loader: djcelery.loaders.DjangoLoader
- logfile: [stderr]@INFO
- concurrency: 4
- events: OFF
- beat: OFF
[Queues]
- celery: exchange: celery (direct) binding: celery
[Tasks]
- app.module.add
[2011-07-27 21:17:19, 990: WARNING/MainProcess] [email protected] has started.
C:\Python27\lib\site-packages\django-celery-2.2.4-py2.7.egg\djcelery\loaders.py:80: UserWarning: Using settings.DEBUG leads to a memory leak, neveruse this setting in production environments!
warnings.warn(“Using settings.DEBUG leads to a memory leak, never”
wtedy kiedy mogę umieścić w poleceniu: Komunikat ten
>>> result = add(4,4)
w dzienniku błędów:
[2011-07-28 11:00:39, 352: ERROR/MainProcess] Unknown task ignored: Task of kind ‘task.add’ is not registered, please make sure it’s imported. Body->”{‘retries’: 0, ‘task’: ‘tasks.add’, ‘args’: (4,4), ‘expires’: None, ‘ta’: None
‘kwargs’: {}, ‘id’: ‘225ec0ad-195e-438b-8905-ce28e7b6ad9’}”
Traceback (most recent call last):
File “C:\Python27\..\celery\worker\consumer.py”,line 368, in receive_message
Eventer=self.event_dispatcher)
File “C:\Python27\..\celery\worker\job.py”,line 306, in from_message
**kw)
File “C:\Python27\..\celery\worker\job.py”,line 275, in __init__
self.task = tasks[self.task_name]
File “C:\Python27\...\celery\registry.py”, line 59, in __getitem__
Raise self.NotRegistered(key)
NotRegistered: ‘tasks.add’
Jak uzyskać czy zadanie jest odpowiednio zarejestrowane i obsługiwane? dzięki.
UPDATE 2:
Ten link zasugerował, że nie zarejestrował błąd może być spowodowane niedopasowaniem nazwa zadania między klientem a pracownikiem - http://celeryproject.org/docs/userguide/tasks.html#automatic-naming-and-relative-imports
wyszli manage.py shell i wszedł powłokę Pythona wprowadzono:
>>> from app.module.tasks import add
>>> result = add.delay(4,4)
>>> result.ready()
False
>>> result.result
>>> (nothing returned)
>>> result.get()
(it just hangs there)
, więc otrzymuję to samo zachowanie, ale nowy komunikat dziennika. Z dziennika, wydaje się, że serwer działa, ale to nie będzie karmić wynik z powrotem:
[2011-07-28 11:39:21, 706: INFO/MainProcess] Got task from broker: app.module.tasks.add[7e794740-63c4-42fb-acd5-b9c6fcd545c3]
[2011-07-28 11:39:21, 706: INFO/MainProcess] Task app.module.tasks.add[7e794740-63c4-42fb-acd5-b9c6fcd545c3] succeed in 0.04600000038147s: 8
więc serwer dostał zadanie, a ona obliczana poprawną odpowiedź, ale nie wyśle go z powrotem? Dlaczego nie?
Czy używasz systemu Windows? Były doniesienia o wynikach, które nie działają w Windows dla Celery 3 – asksol
Tak Używam okien. Mam zamiar powrócić do projektu, który wykorzystuje królik i seler. Będę więc pamiętał o twoich komentarzach. Generalnie byłem bardzo zadowolony z tych dwóch. – sequoia