Usando Python 2.7 y Celery 3.1.25 en Windows, cuando ejecutamos el trabajo de Celery utilizando
celery -A proj worker -l info
recibimos el error
ImportError: No module named celery
Problema: el trabajador deja de trabajar cuando nosotros
celeryApp.py
de celery.py
tasks.py
de la from .celery import app
from celeryApp import app
. ¿Por qué está pasando esto? ¿Cómo podemos solucionar el problema?
Estructura de directorios
/proj/__init__.py /proj/celeryApp.py /proj/tasks.py
/proj/celeryApp.py
from __future__ import absolute_import, unicode_literals from celery import Celery app = Celery('tasks', broker='amqp://jack:jack@192.168.1.26:5672//', backend='amqp://', include=['proj.tasks']) if __name__ == '__main__': app.start()
/proj/tasks.py
from __future__ import absolute_import, unicode_literals from celeryApp import app @app.task def add(x, y): return x + y
Al iniciar un trabajo de apio, debe nombrar la aplicación para que coincida con el archivo de python donde está configurado el módulo de apio. Debes comenzar trabajador con
celery worker -l info -A tasks
No debes nombrar tu archivo de configuración a celery.py
. Esto causará problemas cuando empieces a importar.
from celery import Celery
Su archivo debe tener otro nombre pero no celery.py
.
También en su archivo de configuración no hay necesidad de agregar
if __name__ == '__main__': app.start()
Si va a incluir explícitamente proj.tasks
asegúrese de que proj
esté en la ruta de acceso de Python o simplemente puede eliminarlo cuando esté iniciando Worker con la aplicación de tasks
.