Сельдерей не может найти задачи или настройки с Django 2.1.1 - PullRequest
0 голосов
/ 20 октября 2018

Я пытаюсь выполнить асинхронную задачу, используя сервер Celery и RabbitMQ.Я установил Celery и RabbitMQ в моей системе.Теперь, когда я запускаю celery worker -l info, сельдерей начинает работать с настройками конфигурации по умолчанию, игнорируя мои настройки, и он не показывает зарегистрированных задач.Я предполагаю, что что-то не так из-за структуры моего проекта.Но сейчас это невозможно изменить.Может кто-нибудь помочь мне выяснить, в чем здесь проблема?

Задачи не найдены, и все начинается с настроек по умолчанию, игнорирующих мои имя пользователя, пароль и виртуальный хост, указанные в файле настроек. Tasks are not found and it starts with default settings ignoring my username and password and vhost mentioned in settings file.

Каталог проекта:

|--engine
|  |--app
|  |   |--user
|  |   |--program
|  |   |  |--__init__.py
|  |   |  |--admin.py
|  |   |  |--apps.py
|  |   |  |--models.py
|  |   |  |--tasks.py
|  |   |  |--urls.py
|  |   |  |--views.py
|  |   |--course
|  |--config
|  |   |--settings
|  |   |  |--__init.py
|  |   |  |--default.py
|  |   |  |--development.py
|  |   |  |--production.py
|  |   |--__init__.py
|  |   |--celery.py
|  |   |--middleware.py
|  |   |--urls.py
|  |   |--wsgi.py
|  |--.env
|  |--manage.py
|  |--requirements.txt

engine / config / celery.py

from __future__ import absolute_import, unicode_literals
import os
from celery import Celery


os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'config.settings.default')

app = Celery('config')
app.config_from_object('django.conf:settings', namespace='CELERY')
app.autodiscover_tasks()


@app.task(bind=True)
def debug_task(self):
    print('Request: {0!r}'.format(self.request))

engine / config / __ init __. Py

from __future__ import absolute_import, unicode_literals
from .celery import app as celery_app

__all__ = ('celery_app',)

engine / app / program / tasks.py

from celery import shared_task


@shared_task()
def add(number1, number2):
    print(number1 + number2)

engine/config/settings/default.py

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'rest_framework',
    'corsheaders',
    'django_filters',

    'app.program',
    'app.course',
    'app.user',
]

CELERY_BROKER_URL = 'amqp://uname:pass@localhost:5672/vhost/'

LANGUAGE_CODE = 'en-us'
TIME_ZONE = 'UTC'
USE_I18N = True
USE_L10N = True
USE_TZ = True

Ответы [ 2 ]

0 голосов
/ 23 октября 2018

Фактическая проблема с Windows.Как упомянуто на их сайте -

Does Celery support Windows?
Answer: No.

Since Celery 4.x, Windows is no longer supported due to lack of resources.

But it may still work and we are happy to accept patches.

ресурсы: http://docs.celeryproject.org/en/latest/faq.html#windows

0 голосов
/ 20 октября 2018

Пока что я вижу три проблемы с вашей конфигурацией:

  1. В файле настроек вы должны указывать URL посредника по имени BROKER_URL, а не по CELERY_BROKER_URL.
  2. Декоратор, указанный вtasks.py должен быть @shared_task вместо @shared_task ()
  3. Укажите пути, по которым сельдерей должен искать задачи.В файле celery.py обновите

    app.autodiscover_tasks() 
    

    с

    app.autodiscover_tasks(lambda: settings.INSTALLED_APPS)
    
...