Colas de tareas – Lenguaje Python
Las colas de tareas administran el trabajo en segundo plano que debe ejecutarse fuera del ciclo habitual de solicitud-respuesta HTTP.
¿Por qué son necesarias las colas de tareas?
Las tareas se manejan de forma asincrónica, ya sea porque no se inician mediante una solicitud HTTP o porque son trabajos de larga duración que reducirían drásticamente el rendimiento de una respuesta HTTP.
Por ejemplo, una aplicación web podría sondear la API de GitHub cada 10 minutos para recopilar los nombres de los 100 principales repositorios destacados. Una cola de tareas manejaría invocar código para llamar a la API de GitHub, procesar los resultados y almacenarlos en una base de datos persistente para su uso posterior.
Otro ejemplo es cuando una consulta de base de datos tardaría demasiado durante el ciclo de solicitud-respuesta HTTP. La consulta se puede realizar en segundo plano en un intervalo fijo con los resultados almacenados en la base de datos. Cuando llega una solicitud HTTP que necesita esos resultados, una consulta simplemente buscaría el resultado precalculado en lugar de volver a ejecutar la consulta más larga. Este escenario de cálculo previo es una forma de almacenamiento en caché habilitado por las colas de tareas.
Otros tipos de trabajos para colas de tareas incluyen
-
distribuir una gran cantidad de inserciones de bases de datos independientes a lo largo del tiempo en lugar de insertar todo a la vez
-
agregando valores de datos recopilados en un intervalo fijo, como cada 15 minutos
-
programar trabajos periódicos, como procesos por lotes
Proyectos de cola de tareas
La cola de tareas estándar de facto de Python es Celery. Los otros proyectos de cola de tareas que surgen tienden a provenir de la perspectiva de que Celery es demasiado complicado para casos de uso simples. Mi recomendación es poner el esfuerzo en la curva de aprendizaje razonable de Celery, ya que vale la pena el tiempo que se necesita para comprender cómo usar el proyecto.
-
La cola de tareas distribuidas de Celery es la biblioteca de Python más utilizada para manejar tareas asíncronas y programación.
-
RQ (Redis Queue) es una biblioteca Python simple para poner en cola trabajos y procesarlos en segundo plano con los trabajadores. RQ está respaldado por Redis y está diseñado para tener una barrera de entrada baja.
-
Capataz es una cola distribuida simple y liviana para manejar grandes volúmenes de tareas únicas.
-
Huey es una cola de tareas basada en Redis que tiene como objetivo proporcionar un marco simple pero flexible para ejecutar tareas. Huey admite la programación de tareas, tareas repetitivas similares a crontab, almacenamiento de resultados y reintentos automáticos en caso de falla.
-
Kuyruk es un sistema de cola de tareas simple y fácil de usar construido sobre RabbitMQ. Aunque el conjunto de funciones es pequeño, las extensiones pueden agregar nuevas funciones.
-
Dramatiq es una alternativa rápida y confiable al apio. Es compatible con RabbitMQ y Redis como agentes de mensajes.
-
zanahoria django es una cola de tareas simple específicamente para Django que puede servir cuando Celery es excesivo.
-
tasq es una cola de tareas sin intermediarios para casos de uso simples. No se recomienda para producción a menos que se realicen más pruebas y desarrollo.
Servicios de cola de tareas y mensajes alojados
Los servicios de terceros de la cola de tareas tienen como objetivo resolver los problemas de complejidad que surgen al escalar una gran implementación de colas de tareas distribuidas.
-
Iron.io es una plataforma de servicios de mensajería distribuida que funciona con muchos tipos de colas de tareas, como Celery. También está diseñado para funcionar con otros entornos IaaS y PaaS, como Amazon Web Services y Heroku.
-
Servicio de cola simple de Amazon (SQS) es un conjunto de cinco API para crear, enviar, recibir, modificar y eliminar mensajes.
-
CloudAMQP está en sus servidores principales administrados con RabbitMQ instalado y configurado. Este servicio es una opción si está utilizando RabbitMQ y no desea mantener las instalaciones de RabbitMQ en sus propios servidores.
Ejemplos de código abierto que utilizan colas de tareas
Recursos de la cola de tareas
Lista de verificación de aprendizaje de la cola de tareas
-
Elija una función lenta en su proyecto a la que se llame durante una solicitud HTTP.
-
Determine si puede calcular previamente los resultados en un intervalo fijo en lugar de durante la solicitud HTTP. Si es así, cree una función separada a la que pueda llamar desde otro lugar y luego almacene el valor precalculado en la base de datos.
-
Lea la documentación de Apio y los enlaces en la sección de recursos a continuación para comprender cómo funciona el proyecto.
-
Instale un agente de mensajes como RabbitMQ o Redis y luego agregue Celery a su proyecto. Configure Celery para que funcione con el agente de mensajes instalado.
-
Utilice Celery para invocar la función del paso uno de forma regular.
-
Haga que la función de solicitud HTTP use el valor precalculado en lugar del código de ejecución lenta en el que se basó originalmente.
Esta entrada tiene 0 comentarios