beat - daemonization celery
¿Usando celeryd como demonio con múltiples aplicaciones de django? (2)
Como todas las preguntas interesantes, la respuesta es que depende . :)
Definitivamente es posible llegar a un escenario en el que apio puede ser utilizado por dos sitios independientes. Si varios sitios envían tareas al mismo intercambio, y las tareas no requieren acceso a ninguna base de datos específica, por ejemplo, operan con direcciones de correo electrónico o números de tarjetas de crédito, o algo más que un registro de la base de datos. Ser suficiente. Solo asegúrese de que el código de la tarea esté en un módulo compartido que todos los sitios y el servidor de apio cargan.
Sin embargo, por lo general, encontrará que el apio necesita acceso a la base de datos, ya sea que cargue objetos según el ID que se pasó como parámetro de la tarea, o que tenga que escribir algunos cambios en la base de datos o, más a menudo, ambos . Y los sitios / proyectos múltiples generalmente no comparten una base de datos, incluso si comparten las mismas aplicaciones, por lo que deberá mantener las colas de tareas separadas.
En ese caso, lo que suele suceder es que configure un único intermediario de mensajes (RabbitMQ, por ejemplo) con múltiples intercambios. Cada intercambio recibe mensajes de un solo sitio. Luego, ejecuta uno o más procesos de apio en algún lugar para cada intercambio (en las configuraciones de configuración de apio, debe especificar el intercambio. No creo que Celeryd pueda escuchar múltiples intercambios). Cada servidor celeryd conoce su intercambio, las aplicaciones que debe cargar y la base de datos a la que debe conectarse.
Para administrar esto, sugeriría buscar en cyme : es de @asksol y administra múltiples instancias de apio, en varios servidores si es necesario. No lo he intentado, pero parece que debería manejar diferentes configuraciones para diferentes instancias.
Estoy empezando a usar django-celery y me gustaría configurar apio como un demonio. Sin embargo, las instructions parecen sugerir que se puede configurar solo para un sitio / proyecto a la vez. ¿Puede el apio manejar más de un proyecto, o puede manejar solo uno? Y, si este es el caso, ¿hay una manera limpia de configurar celeryd para que se inicie automáticamente para cada configuración, lo que me obliga a crear una secuencia de comandos de inicio separada para cada una?
No lo intenté, pero usa Celery 3.1.x que no necesita django-celery, de acuerdo con la documentación, puede instanciar una aplicación de Celery como esta:
app1 = Celery(''app1'')
app1.config_from_object(''django.conf:settings'')
app1.autodiscover_tasks(lambda: settings.INSTALLED_APPS)
@app.task(bind=True)
def debug_task(self):
print(''Request: {0!r}''.format(self.request))
Pero puede usar apio multi para lanzar varios trabajadores con una sola configuración cada uno, puede ver ejemplos here . Por lo tanto, puede iniciar varios trabajadores con diferentes parámetros --app appX para que use diferentes ajustes y configuraciones:
# 3 workers: Two with 3 processes, and one with 10 processes.
$ celery multi start 3 -c 3 -c:1 10
celery worker -n celery1@myhost -c 10 --config celery1.py --app app1
celery worker -n celery2@myhost -c 3 --config celery2.py --app app2
celery worker -n celery3@myhost -c 3 --config celery3.py --app app3