script python3 intérprete interprete interactivo ejemplo comandos comando python celery celeryd

python3 - intérprete interactivo de python



¿Cómo iniciar un trabajador de apio desde un script/módulo__main__? (3)

Basado en el código del módulo Django-Celery, puedes probar algo como esto:

from __future__ import absolute_import, unicode_literals from celery import current_app from celery.bin import worker if __name__ == ''__main__'': app = current_app._get_current_object() worker = worker.worker(app=app) options = { ''broker'': ''amqp://guest:guest@localhost:5672//'', ''loglevel'': ''INFO'', ''traceback'': True, } worker.run(**options)

He definido una aplicación de Celery en un módulo, y ahora quiero iniciar al trabajador desde el mismo módulo en su __main__ , es decir, ejecutando el módulo con python -m lugar de celery desde la línea de comandos. Intenté esto:

app = Celery(''project'', include=[''project.tasks'']) # do all kind of project-specific configuration # that should occur whenever this module is imported if __name__ == ''__main__'': # log stuff about the configuration app.start([''worker'', ''-A'', ''project.tasks''])

pero ahora Celery cree que estoy manejando al trabajador sin argumentos:

Usage: worker <command> [options] Show help screen and exit. Options: -A APP, --app=APP app instance to use (e.g. module.attr_name) [snip]

El mensaje de uso es el que recibe del celery --help , como si no hubiera recibido un comando. También he intentado

app.worker_main([''-A'', ''project.tasks''])

Pero eso se queja de que el -A no sea reconocido.

Entonces, ¿cómo hago esto? O alternativamente, ¿cómo paso una devolución de llamada al trabajador para que registre información sobre su configuración?


Creo que simplemente te estás perdiendo de envolver los argumentos para que el apio pueda leerlos, como:

queue = Celery(''blah'', include=[''blah'']) queue.start(argv=[''celery'', ''worker'', ''-l'', ''info''])


utilizando el método app.worker_main (v3.1.12):

± cat start_celery.py #!/usr/bin/python from myapp import app if __name__ == "__main__": argv = [ ''worker'', ''--loglevel=DEBUG'', ] app.worker_main(argv)