8 puntos por GN⁺ 2024-08-19 | 1 comentarios | Compartir por WhatsApp
  • PgQueuer es una biblioteca minimalista y de alto rendimiento de cola de trabajos para Python que aprovecha la solidez de PostgreSQL
  • Está diseñada para la simplicidad y la eficiencia, y usa LISTEN/NOTIFY de PostgreSQL para gestionar fácilmente la cola de trabajos

Características

  • Integración sencilla: se puede integrar fácilmente con aplicaciones de Python existentes que usan PostgreSQL
  • Manejo eficiente de concurrencia: usa FOR UPDATE SKIP LOCKED de PostgreSQL para permitir un procesamiento de trabajos confiable y concurrente
  • Notificaciones en tiempo real: aprovecha LISTEN y NOTIFY para ofrecer actualizaciones en tiempo real sobre cambios en el estado de los trabajos

Resumen de GN⁺

  • PgQueuer permite gestionar de forma eficiente colas de trabajos en aplicaciones de Python aprovechando la funcionalidad LISTEN/NOTIFY de PostgreSQL.
  • Ofrece integración sencilla y manejo eficiente de concurrencia, por lo que puede aplicarse fácilmente a sistemas existentes.
  • Con su función de notificaciones en tiempo real, es posible verificar de inmediato el estado de los trabajos, lo que facilita su administración.
  • Otros proyectos con funcionalidades similares incluyen RQ y Celery.

1 comentarios

 
GN⁺ 2024-08-19
Comentarios en Hacker News
  • Pregunta sobre la comparación con la librería Graphile Worker
  • Reflexión sobre la posibilidad de que las librerías de colas de trabajo basadas en PostgreSQL compartan un esquema común
    • Soy fan de Oban de Elixir
    • Así como hay librerías compatibles con Sidekiq en varios lenguajes, un enfoque similar para colas de trabajo basadas en PostgreSQL sería útil
    • Se podría desarrollar una librería central de colas de trabajo en Rust y considerar bindings por lenguaje
  • Apoya usar Postgres para todo y lo está llevando al máximo en su proyecto
    • Quiere una cola de trabajo en Postgres que haga pipelines de múltiples etapas, fan-out y acumulación
    • Una base de datos relacional estructurada es especialmente adecuada para modelar esto
    • El tamaño máximo de payload de 8k de listen/notify es una limitación
    • Quiere tablas de streaming y soporte de tipos más rico
  • Recomienda un buen episodio de PostgresFM sobre implementar colas en Postgres
  • PgQueuer integra bien llamadas RPC de Postgres, triggers y cronjobs (pg_cron)
  • La librería River también vale la pena revisar
    • Soporta trabajos programados, entre otros
    • También ofrece una UI para depuración
  • Está usando Broadcaster para trabajos PUB/SUB
  • El ejemplo más simple de una cola de trabajo en MySQL
    • Usa la sintaxis update job_table set key=value where ... limit 1
    • Es simple y atómico
    • PostgreSQL no permite la sintaxis update ... limit
  • Es usuario de MySQL pero está explorando PostgreSQL
    • Ofrece muchas funciones de fábrica
    • Es una herramienta muy interesante
  • También existe la librería Procrastinate
    • Usa LISTEN/NOTIFY de PostgreSQL (se puede desactivar opcionalmente y usar polling)
    • Soporta trabajos síncronos y asíncronos, trabajos periódicos, reintentos, bloqueo de trabajos, prioridad, cancelación/interrupción de trabajos, integración con Django (opcional)
    • Es co-mantenedor de Procrastinate