Учебник Django Celery не возвращает результаты

UDATE3: обнаружил проблему. См. Ответ ниже.

UPDATE2: Кажется, я мог иметь дело с проблемой автоматического именования и относительного импорта, запустив учебник djcelery через оболочку manage.py, см. Ниже. У меня все еще не работает, но теперь я получаю новые сообщения об ошибках журнала. См. Ниже.

ОБНОВЛЕНИЕ: Я добавил лог внизу сообщения. Кажется, что пример задачи не зарегистрирован?

Исходное сообщение:

Я пытаюсь запустить django-celery. Мне не удалось пройти через этот пример.

Я успешно установил rabbitmq и без проблем прошел через обучающие программы: http://www.rabbitmq.com/getstarted.html

Затем я попытался пройти через руководство по djcelery.

Когда я запускаю python manage.py celeryd -l info , я получаю сообщение: [Задачи] - app.module.add [2011-07-27 21:17:19, 990: WARNING / MainProcess] celery @ sequoia запущен.

Так что выглядит хорошо. Я поместил это в начало своего файла настроек:

import djcelery
djcelery.setup_loader()

BROKER_HOST = "localhost"
BROKER_PORT = 5672
BROKER_USER = "guest"
BROKER_PASSWORD = "guest"
BROKER_VHOST = "/"

добавил это в мои установленные приложения:

'djcelery',

вот мой файл tasks.py в папке задач моего приложения:

from celery.task import task

@task()
def add(x, y):
    return x + y

Я добавил это в свой django.wsgi file:

os.environ["CELERY_LOADER"] = "django"

Затем я ввел это в командной строке:

>>> from app.module.tasks import add
>>> result = add.delay(4,4)
>>> result
(AsyncResult: 7auathu945gry48- a bunch of stuff)
>>> result.ready()
False

Похоже, что это сработало, но вот проблема:

>>> result.result
>>>               (nothing is returned)
>>> result.get()

Когда я ввожу result.get (), он просто зависает. Что я делаю не так?

ОБНОВЛЕНИЕ: Вот что говорит запуск регистратора на переднем плане, когда я запускаю рабочий сервер:

No handlers could be found for logger “multiprocessing”

[Configuration]
- broker:      amqplib://guest@localhost: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] celery@sequoia 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”

, затем, когда я ввожу команду:

>>> result = add(4,4)

Это появляется в журнал ошибок:

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

Как мне получить регистрацию и правильную обработку этой задачи? спасибо.

ОБНОВЛЕНИЕ 2:

Эта ссылка предполагает, что незарегистрированная ошибка может быть связана с несоответствием имен задач между клиентом и исполнителем - http://celeryproject.org/docs/userguide/tasks.html# автоматическое именование-and-relative-import

вышел из оболочки manage.py и вошел в оболочку python и ввел следующее:

>>> from app.module.tasks import add
>>> result = add.delay(4,4)
>>> result.ready()
False
>>> result.result
>>>                 (nothing returned)
>>> result.get()
                    (it just hangs there)

, поэтому я получаю такое же поведение, но новое сообщение журнала. Из журнала видно, что сервер работает, но он не возвращает результат:

[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

Итак, сервер получил задачу и вычислил правильный ответ, но не отправляет его обратно? почему бы и нет?

11
задан Serjik 19 December 2015 в 11:27
поделиться