[Py-ES] Sistemas de colas

Felipe Maza felipe at felipem.com
Mon Jul 5 21:30:25 CEST 2021


Hola,

Llevo unos días viendo diferentes programas para gestionar sistemas de
colas y, en principio, creo que casi todos parecen complejos para lo que
necesito.

Mi problema a resolver es el siguiente, tenemos un modelo de predicción que
se ejecuta periódicamente y también bajo demanda del usuario. Ese modelo se
ejecuta en un solo hilo y tarda bastantes minutos en completar la tarea.
Por tanto, puedo tener varias ejecuciones simultáneas siempre que no
excedamos el número de cores disponibles, ya que en ese caso se vuelve el
sistema excesivamente lento. Al modelo se le invoca a través de una pequeña
api hecha con flask. En el futuro puede que haya otros modelos en la misma
máquina.

Hace un par de años para un problema similar ya me programé mi propio
gestor de colas rudimentario,pero ahora busco algo que sea estable, con
pocos bugs, mantenible, etc.

Las características que (creo que) necesito son:
- Encolar tareas (logicamente)
- Tener colas con diferente prioridad (manuales, periódicas).
- Registrar la salida, tanto si ha tenido éxito como si ha tenido errores.
- (opcional) En un futuro ejecutar otras apis con modelo en la misma
máquina.


Lo primero que he explorado ha sido Celery, y es impresionante el montón de
posibilidades que ofrece, tantas que ir poco más de los ejemplos iniciales
me parece muy complejo para solucionar el problema anterior. Me da la
sensación que hay que controlar un montón de aspectos para montarlo y
mantenerlo correctamente; y que cuando aparezca algún error no va a ser
rápido dar con la solución.

Después de mirar otras alternativas, con la que parece que he montado una
primera versión que parece que me lo soluciona, es Redis Queue (
https://python-rq.org/). La forma en la que utiliza Redis es relativamente
simple, y más o menos ofrece lo que necesito.
En el tema de los worker creo que ahí flojea un poco, pues parece que
tendré que gestionar manualmente cuántos hay arrancados y si no se han
muerto.


¿Tenéis experiencia resolviendo algún problema similar? ¿Creéis que merece
la pena el esfuerzo para aprender celery (u otra solución) para algo que no
debería ser muy complejo? ¿Redis os parece buen motor o debería ir a
Rabbitmq? Nunca había usado ninguno de ellos. ¿Cómo gestionais el tema de
los worker? Seguro que es más sencillo de lo que creo.
Cualquier comentario que queráis hacer será bienvenido.

Gracias,

Un saludo.

-- 
Felipe Maza Fernández
felipe at felipem.com
622 338 121
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.es.python.org/pipermail/general/attachments/20210705/9b165d55/attachment.htm>


More information about the general mailing list