ModuleNotFoundError: No module named 'myapp'Realmente no entiendo cuál es el problema aquí. No hay problemas con mi aplicación, pero parece que el apio no puede encontrarla sin importar lo que intente y cambie.
Aquí está mi estructura de directorios:
django / mysite __init__.py celery.py settings.py urls.py wsgi.py / myapp admin.py apps.py models.py tasks.py urls.py views.py manage.pyapio.py:
from __future__ import absolute_import, unicode_literals import os from celery import Celery # set the default Django settings module for the 'celery' program. os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'mysite.settings') app = Celery('myapp') # Using a string here means the worker don't have to serialize # the configuration object to child processes. # - namespace='CELERY' means all celery-related configuration keys # should have a `CELERY_` prefix. app.config_from_object('django.conf:settings', namespace='CELERY') # Load task modules from all registered Django app configs. app.autodiscover_tasks() @app.task(bind=True) def debug_task(self): print('Request: {0!r}'.format(self.request)) Comando: celery -A myapp worker -l info
Asegúrese de que su archivo init .py contenga lo siguiente:
from __future__ import absolute_import, unicode_literals # This will make sure the app is always imported when # Django starts so that shared_task will use this app. from .celery_worker import app as celery_app __all__ = ['celery_app']Además, asegúrese de que su celery.py se vea similar a este
from __future__ import absolute_import, unicode_literals import os from celery import Celery from celery.schedules import crontab import mysite # set the default Django settings module for the 'celery' program. os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'mysite.settings') app = Celery('wellfie') # Using a string here means the worker don't have to serialize # the configuration object to child processes. # - namespace='CELERY' means all celery-related configuration keys # should have a `CELERY_` prefix. app.config_from_object('django.conf:settings', namespace='CELERY') # Load task modules from all registered Django app configs. app.autodiscover_tasks() @app.task(bind=True) def debug_task(self): print('Request: {0!r}'.format(self.request))Asegúrese de que sus tareas también se reconozcan correctamente: por ejemplo, una tarea compartida se vería como
@shared_task(name="mysite.myapp.tasks.simple_task") Editar.
En realidad, debe mover myapp fuera de mysite y colocarlo en la carpeta Django. También cambiaría el nombre de la carpeta Django a mysite, de modo que tenga la carpeta principal mysite, la carpeta secundaria mysite, que contiene wsgi, apio, configuraciones, etc., la carpeta secundaria myapp
Su archivo celery.py debe estar en la carpeta myapp . ( http://docs.celeryproject.org/en/latest/django/primeros-pasos-con-django.html )
Debe ejecutar celery -A myapp worker -l info en la carpeta mysite .