python redis celery scheduled-tasks python-rq

python - Pros y contras de usar Celery vs. RQ



rq worker (2)

Aquí está lo que he encontrado al intentar responder a esta misma pregunta. Probablemente no sea exhaustivo, e incluso puede ser inexacto en algunos puntos.

En resumen, RQ está diseñado para ser más simple en todo. El apio está diseñado para ser más robusto. Ambos son excelentes.

  • Documentación. RQ es completa sin ser compleja, y refleja la simplicidad general del proyecto: nunca se siente perdido o confundido. La documentación de Celery también es exhaustiva, pero espera volver a visitarla cuando empieces a configurar las cosas, ya que hay demasiadas opciones para internalizar.
  • Vigilancia. Celery''s Flower y el panel de control de RQ son muy fáciles de configurar y te dan al menos el 90% de toda la información que desearías

  • Apoyo del corredor. El apio es el claro ganador, RQ solo apoya a Redis. Esto significa menos documentación sobre "qué es un intermediario", pero también significa que no puede cambiar de intermediario en el futuro si Redis ya no funciona para usted. Por ejemplo, Instagram consideró tanto Redis como RabbitMQ con Celery . Esto es importante porque los diferentes corredores tienen diferentes garantías, por ejemplo, Redis no puede (en el momento de la escritura) garantizar al 100% que sus mensajes son entregados.

  • Colas de prioridad. El modelo de colas de prioridad de RQ es simple y efectivo: los trabajadores leen las colas en orden . El apio requiere que muchos trabajadores consuman de diferentes colas. Ambos enfoques funcionan

  • Soporte OS. El apio es el claro ganador aquí, ya que RQ solo se ejecuta en sistemas que admiten fork por ejemplo, sistemas Unix.

  • Ayuda de idioma. RQ solo admite Python, mientras que Celery te permite enviar tareas de un idioma a otro idioma

  • API. El apio es extremadamente flexible (múltiples backends de resultados, formato de configuración agradable, soporte de lienzo de flujo de trabajo) pero, naturalmente, este poder puede ser confuso. Por el contrario, la api RQ es simple.

  • Soporte de subtareas. El apio soporta subtareas (por ejemplo, crear nuevas tareas dentro de las tareas existentes). No se si rq lo hace

  • Comunidad y Estabilidad. El apio probablemente esté más establecido, pero ambos son proyectos activos. Al momento de escribir, Celery tiene ~ 3500 estrellas en Github mientras que RQ tiene ~ 2000 y ambos proyectos muestran un desarrollo activo.

En mi opinión, el apio no es tan complejo como su reputación podría llevarlo a creer, pero tendrá que RTFM.

Entonces, ¿por qué alguien estaría dispuesto a intercambiar el apio (posiblemente más completo) por RQ? En mi opinión, todo se reduce a la simplicidad. Al restringirse a Redis + Unix, RQ proporciona documentación más sencilla, base de código más simple y una API más simple. Esto significa que usted (y los posibles contribuyentes a su proyecto) puede centrarse en el código que le interesa, en lugar de tener que mantener los detalles sobre el sistema de cola de tareas en su memoria de trabajo. Todos tenemos un límite en la cantidad de detalles que podemos tener al mismo tiempo, y al eliminar la necesidad de mantener los detalles de la cola de tareas allí, RQ le permite volver al código que le interesa. Esa simplicidad se produce a expensas de características como colas de tareas entre idiomas, soporte de sistema operativo amplio, garantías de mensajes 100% confiables y la capacidad de cambiar los intermediarios de mensajes fácilmente.

Actualmente estoy trabajando en un proyecto de Python que requiere implementar algunos trabajos en segundo plano (principalmente para el envío de correos electrónicos y actualizaciones de bases de datos). Yo uso Redis para el agente de tareas. Así que en este punto tengo dos candidatos: Celery y RQ . Tenía algo de experiencia con estas colas de trabajo, pero quiero pedirles que compartan la experiencia de usar estas herramientas. Asi que.

  1. ¿Qué ventajas y desventajas es usar Celery vs. RQ?
  2. Cualquier ejemplo de proyectos / tarea adecuada para usar Celery vs. RQ.

El apio parece bastante complicado pero es una solución completa. En realidad no creo que necesite todas estas características. Desde el otro lado, RQ es muy simple (por ejemplo, configuración, integración), pero parece que carece de algunas características útiles (por ejemplo, revocación de tareas, recarga automática de códigos)


El apio no es tan complicado. Básicamente, realice la configuración paso a paso de los tutorials , cree una instancia de celery , decore su función con @celery.task luego ejecute la tarea con my_task.delay(*args, **kwargs) .

A juzgar por su propia evaluación, parece que tiene que elegir entre las características faltantes (clave) o tener algún exceso de actividad. No es una elección demasiado difícil en mi libro.