Я думаю, что на этот вопрос могут быть похожие вопросы, но не совсем такие, поэтому я публикую это. В основном мой Djang Rest Framework работал нормально, затем я попытался реализовать сельдерей, и теперь он испортил мой импорт, и, похоже, выдает сообщение об ошибке после инициации работника сельдерея. Я нахожусь на Windows 10.
Структура проекта
- MyProj
-> MyProj (same name)
-> __init__.py
-> celery_tasks.py
-> settings.py
- MyApp
-> __init__.py
-> load_of_other_files
init.py
#from __future__ import absolute_import, unicode_literals
from MyProj.celery_tasks import app as celery_app
__all__ = ('celery_app',)
celery_tasks.py
#from __future__ import absolute_import, unicode_literals
import os
from celery import Celery
import time
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "settings")
app = Celery("tasks", broker="amqp://localhost//", backend="rpc://")
app.config_from_object('django.conf:settings', namespace='CELERY')
app.autodiscover_tasks()
settings.py
import os
..
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'rest_framework',
'MyApp',
]
Затем я перехожу в мой каталог MyProj
и запускаю работника как Итак:
celery -A celery_tasks worker --loglevel=INFO --concurrency=10 -n worker1.%h --pool=solo
Получаемая трассировка:
ModuleNotFoundError: No module named 'MyApp'
Я пробовал с и без from __future__ import absolute_import, unicode_literals
, но, похоже, не работает. Я понимаю, что absolute_import необходим, чтобы избежать конфликта celery.py с библиотекой celery, что в моем случае не так, потому что мой celery.py называется celery_tasks.py (чтобы избежать путаницы). Как я могу обойти это сообщение об ошибке?