results and python celery

and - python celery redis



Apio Se recibiĆ³ una tarea de tipo no registrada(ejemplo de ejecuciĆ³n) (24)

Creo que necesitas reiniciar el servidor de trabajo. Me encuentro con el mismo problema y lo resuelvo reiniciando.

Estoy tratando de ejecutar un example de la documentación de Celery.

Yo corro: celeryd --loglevel=INFO

/usr/local/lib/python2.7/dist-packages/celery/loaders/default.py:64: NotConfigured: No ''celeryconfig'' module found! Please make sure it exists and is available to Python. "is available to Python." % (configname, ))) [2012-03-19 04:26:34,899: WARNING/MainProcess] -------------- celery@ubuntu v2.5.1 ---- **** ----- --- * *** * -- [Configuration] -- * - **** --- . broker: amqp://guest@localhost:5672// - ** ---------- . loader: celery.loaders.default.Loader - ** ---------- . logfile: [stderr]@INFO - ** ---------- . concurrency: 4 - ** ---------- . events: OFF - *** --- * --- . beat: OFF -- ******* ---- --- ***** ----- [Queues] -------------- . celery: exchange:celery (direct) binding:celery

tareas.py:

# -*- coding: utf-8 -*- from celery.task import task @task def add(x, y): return x + y

run_task.py:

# -*- coding: utf-8 -*- from tasks import add result = add.delay(4, 4) print (result) print (result.ready()) print (result.get())

En la misma carpeta celeryconfig.py:

CELERY_IMPORTS = ("tasks", ) CELERY_RESULT_BACKEND = "amqp" BROKER_URL = "amqp://guest:guest@localhost:5672//" CELERY_TASK_RESULT_EXPIRES = 300

Cuando ejecuto "run_task.py":

en la consola de python

eb503f77-b5fc-44e2-ac0b-91ce6ddbf153 False

errores en el servidor de apio

[2012-03-19 04:34:14,913: ERROR/MainProcess] Received unregistered task of type ''tasks.add''. The message has been ignored and discarded. Did you remember to import the module containing this task? Or maybe you are using relative imports? Please see http://bit.ly/gLye1c for more information. The full contents of the message body was: {''retries'': 0, ''task'': ''tasks.add'', ''utc'': False, ''args'': (4, 4), ''expires'': None, ''eta'': None, ''kwargs'': {}, ''id'': ''841bc21f-8124-436b-92f1-e3b62cafdfe7''} Traceback (most recent call last): File "/usr/local/lib/python2.7/dist-packages/celery/worker/consumer.py", line 444, in receive_message self.strategies[name](message, body, message.ack_log_error) KeyError: ''tasks.add''

Por favor explique cuál es el problema.


Descubrí que uno de nuestros programadores agregó la siguiente línea a una de las importaciones:

os.chdir(<path_to_a_local_folder>)

Esto provocó que el trabajador de Celery cambiara su directorio de trabajo del directorio de trabajo predeterminado de los proyectos (donde podría encontrar las tareas) a un directorio diferente (donde no pudo encontrar las tareas).

Después de eliminar esta línea de código, todas las tareas fueron encontradas y registradas.


El apio no admite importaciones relativas, por lo que en mi celeryconfig.py, necesita una importación absoluta.

CELERYBEAT_SCHEDULE = { ''add_num'': { ''task'': ''app.tasks.add_num.add_nums'', ''schedule'': timedelta(seconds=10), ''args'': (1, 2) } }


El uso de --settings no funcionó para mí. Tuve que usar lo siguiente para que todo funcione:

celery --config=celeryconfig --loglevel=INFO

Aquí está el archivo celeryconfig que tiene el CELERY_IMPORTS agregado:

# Celery configuration file BROKER_URL = ''amqp://'' CELERY_RESULT_BACKEND = ''amqp://'' CELERY_TASK_SERIALIZER = ''json'' CELERY_RESULT_SERIALIZER = ''json'' CELERY_TIMEZONE = ''America/Los_Angeles'' CELERY_ENABLE_UTC = True CELERY_IMPORTS = ("tasks",)

Mi configuración fue un poco más complicada porque estoy usando supervisor para lanzar apio como demonio.


En mi caso, el error se debió a que un contenedor creó archivos en una carpeta que se montaron en el sistema de archivos del host con la ventana acoplable compuesta.

Solo tuve que eliminar los archivos creados por el contenedor en el sistema host y pude iniciar mi proyecto nuevamente.

sudo rm -Rf nombre de carpeta

(Tuve que usar sudo porque los archivos eran propiedad del usuario root)

Versión Docker: 18.03.1


Esto, extrañamente, también puede ser debido a un paquete faltante. Ejecute pip para instalar todos los paquetes necesarios: pip install -r requirements.txt

autodiscover_tasks no estaba recogiendo tareas que usaban paquetes faltantes.


La solución para mí para agregar esta línea a / etc / default / celeryd

CELERYD_OPTS="-A tasks"

Porque cuando ejecuto estos comandos:

celery worker --loglevel=INFO celery worker -A tasks --loglevel=INFO

Sólo el último comando mostraba nombres de tareas.

También he intentado agregar la línea CELERY_APP / etc / default / celeryd pero tampoco funcionó.

CELERY_APP="tasks"


Lo que funcionó para mí fue agregar un nombre explícito al decorador de apio. Cambié mi declaración de tarea de @app.tasks a @app.tasks(name=''module.submodule.task'')

Aquí hay un ejemplo

# test_task.py @celery.task def test_task(): print("Celery Task !!!!") # test_task.py @celery.task(name=''tasks.test.test_task'') def test_task(): print("Celery Task !!!!")


Mis 2 centavos

Estaba obteniendo esto en una imagen docker usando alpine. La configuración de django hace referencia a /dev/log para el registro en syslog. La aplicación django y el trabajador del apio se basaron en la misma imagen. El punto de entrada de la imagen de la aplicación django fue el inicio de syslogd en el inicio, pero el del apio no lo fue. Esto estaba causando que el ./manage.py shell fallara porque no habría ningún /dev/log . El trabajador del apio no estaba fallando. En su lugar, fue silencioso simplemente ignorando el resto del lanzamiento de la aplicación, que incluía la carga de entradas shared_task desde aplicaciones en el proyecto django.


No tuve ningún problema con Django . Pero encontré esto cuando estaba usando Flask . La solución fue configurar la opción de configuración.

celery worker -A app.celery --loglevel=DEBUG --config=settings

mientras que con Django, acabo de tener:

python manage.py celery worker -c 2 --loglevel=info


Para mí, este error se resolvió asegurando que la aplicación que contenía las tareas se incluyera en la configuración INSTALLED_APPS de django.


Puede ver la lista actual de tareas registradas en la clase celery.registry.TaskRegistry . Podría ser que su apio (en el directorio actual) no está en PYTHONPATH por lo que el apio no puede encontrarlo y vuelve a los valores predeterminados. Simplemente especifíquelo explícitamente al iniciar el apio.

celeryd --loglevel=INFO --settings=celeryconfig

También puede configurar --loglevel=DEBUG y probablemente debería ver el problema inmediatamente.


Si se encuentra con este tipo de error, hay varias causas posibles, pero la solución que encontré fue que mi archivo de configuración celeryd en / etc / defaults / celeryd estaba configurado para uso estándar, no para mi proyecto específico de django. Tan pronto como lo convertí al formato especificado en los documentos de apio , todo estuvo bien.


Si usa autodiscover_tasks , asegúrese de que sus functions para registrarse permanezcan en el tasks.py , no en ningún otro archivo. O el apio no puede encontrar las functions que desea registrar.

Usar app.register_task también hará el trabajo, pero parece un poco ingenuo.

Por favor, consulte esta especificación oficial de autodiscover_tasks .

def autodiscover_tasks(self, packages=None, related_name=''tasks'', force=False): """Auto-discover task modules. Searches a list of packages for a "tasks.py" module (or use related_name argument). If the name is empty, this will be delegated to fix-ups (e.g., Django). For example if you have a directory layout like this: .. code-block:: text foo/__init__.py tasks.py models.py bar/__init__.py tasks.py models.py baz/__init__.py models.py Then calling ``app.autodiscover_tasks([''foo'', bar'', ''baz''])`` will result in the modules ``foo.tasks`` and ``bar.tasks`` being imported. Arguments: packages (List[str]): List of packages to search. This argument may also be a callable, in which case the value returned is used (for lazy evaluation). related_name (str): The name of the module to find. Defaults to "tasks": meaning "look for ''module.tasks'' for every module in ``packages``." force (bool): By default this call is lazy so that the actual auto-discovery won''t happen until an application imports the default modules. Forcing will cause the auto-discovery to happen immediately. """


Solo para agregar mis dos centavos para mi caso con este error ...

Mi ruta es /vagrant/devops/test con app.py y __init__.py en ella.

Cuando ejecuto cd /vagrant/devops/ && celery worker -A test.app.celery --loglevel=info , recibo este error.

Pero cuando lo ejecuto como cd /vagrant/devops/test && celery worker -A app.celery --loglevel=info todo está bien.


También encontré este problema, pero no es exactamente el mismo, así que solo para tu información. Las actualizaciones recientes causan este mensaje de error debido a la sintaxis de este decorador.

ERROR/MainProcess] Received unregistered task of type ''my_server_check''.

@task(''my_server_check'')

Había que cambiar a solo

@task()

No hay idea de por qué.


También tuve el mismo problema; yo añadí

CELERY_IMPORTS=("mytasks")

en mi archivo celeryconfig.py para resolverlo.


Tuve el mismo problema ejecutando tareas de Celery Beat. Al apio no le gustan las importaciones relativas, así que en mi celeryconfig.py , tuve que establecer explícitamente el nombre completo del paquete:

app.conf.beat_schedule = { ''add-every-30-seconds'': { ''task'': ''full.path.to.add'', ''schedule'': 30.0, ''args'': (16, 16) }, }


Tuve el mismo problema: la razón de "Received unregistered task of type.." fue que el servicio celeryd no encontró y no registró las tareas en el inicio del servicio (por cierto, su lista es visible cuando se inicia ./manage.py celeryd --loglevel=info ).

Estas tareas deben declararse en CELERY_IMPORTS = ("tasks", ) en el archivo de configuración.
Si tiene un archivo especial celery_settings.py , debe declararlo en el servicio celeryd start como --settings=celery_settings.py como escribió Digivampire.


Tuve el problema con las clases de PeriodicTask en django-apio, mientras que sus nombres aparecían bien al iniciar al trabajador de apio cada ejecución desencadenada:

KeyError: u''my_app.tasks.run ''

Mi tarea era una clase llamada ''CleanUp'', no solo un método llamado ''ejecutar''.

Cuando verifiqué la tabla ''djcelery_periodictask'', vi entradas obsoletas y al eliminarlas se solucionó el problema.


Tuve un problema que surgió misteriosamente cuando agregué algo de manejo de señales a mi aplicación django. Al hacerlo, convertí la aplicación para usar un AppConfig, lo que significa que en lugar de simplemente leer como ''booking '' en INSTALLED_APPS , decía ''booking.app.BookingConfig'' .

El apio no entiende lo que eso significa, así que agregué, INSTALLED_APPS_WITH_APPCONFIGS = (''booking'',) a mi configuración de django, y modifiqué mi celery.py desde

app.autodiscover_tasks(lambda: settings.INSTALLED_APPS)

a

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


Un elemento adicional a una lista realmente útil.

He encontrado que Celery no perdona en relación con los errores en las tareas (o al menos no he podido rastrear las entradas de registro apropiadas) y no las registra. He tenido una serie de problemas con la ejecución de Celery como un servicio, que han estado relacionados principalmente con los permisos.

Lo último relacionado con la escritura de permisos en un archivo de registro. No tuve problemas en el desarrollo o en la ejecución del apio en la línea de comandos, pero el servicio informó que la tarea no estaba registrada.

Necesitaba cambiar los permisos de la carpeta de registro para permitir que el servicio escriba en él.


Ya sea que use CELERY_IMPORTS o autodiscover_tasks , el punto importante es que las tareas se pueden encontrar y el nombre de las tareas registradas en Apio debe coincidir con los nombres que los trabajadores intentan obtener.

Cuando inicie Celery, diga celery worker -A project --loglevel=DEBUG , debería ver el nombre de las tareas. Por ejemplo, si tengo una tarea debug_task en mi celery.py .

[tasks] . project.celery.debug_task . celery.backend_cleanup . celery.chain . celery.chord . celery.chord_unlock . celery.chunks . celery.group . celery.map . celery.starmap

Si no puede ver sus tareas en la lista, verifique que su configuración de apio importe las tareas correctamente, ya sea en --setting , --config , celeryconfig o config_from_object .

Si está usando apio, asegúrese de que el nombre de la tarea, task que usa en CELERYBEAT_SCHEDULE coincida con el nombre en la lista de tareas de apio.


app = Celery(''proj'', broker=''amqp://'', backend=''amqp://'', include=[''proj.tasks''])

por favor incluya = [''proj.tasks''] Necesita ir al directorio superior, luego ejecute esto

celery -A app.celery_module.celeryapp worker --loglevel=info

no

celery -A celeryapp worker --loglevel=info

en su entrada celeryconfig.py imports = ("path.ptah.tasks",)

Por favor en otro módulo invocar tarea !!!!!!!!