8 points par GN⁺ 2024-08-19 | 1 commentaires | Partager sur WhatsApp
  • PgQueuer est une bibliothèque de file d’attente de tâches minimaliste et haute performance pour Python, qui exploite la robustesse de PostgreSQL
  • Conçue pour la simplicité et l’efficacité, elle permet de gérer facilement des files de tâches en utilisant LISTEN/NOTIFY de PostgreSQL

Caractéristiques

  • Intégration simple : peut être facilement intégrée aux applications Python existantes qui utilisent PostgreSQL
  • Gestion efficace de la concurrence : utilise FOR UPDATE SKIP LOCKED de PostgreSQL pour permettre un traitement des tâches fiable et concurrent
  • Notifications en temps réel : exploite LISTEN et NOTIFY pour fournir des mises à jour en temps réel sur les changements d’état des tâches

Le résumé de GN⁺

  • PgQueuer exploite les fonctionnalités LISTEN/NOTIFY de PostgreSQL pour gérer efficacement des files de tâches dans les applications Python.
  • Il offre une intégration simple et une gestion efficace de la concurrence, ce qui facilite son adoption dans des systèmes existants.
  • Grâce aux notifications en temps réel, il est possible de vérifier immédiatement l’état des tâches, ce qui simplifie leur gestion.
  • Parmi les autres projets offrant des fonctionnalités similaires, on peut citer RQ et Celery.

1 commentaires

 
GN⁺ 2024-08-19
Avis sur Hacker News
  • Question sur la comparaison avec la bibliothèque Graphile Worker
  • Réflexion sur la possibilité pour les bibliothèques de files de tâches basées sur PostgreSQL de partager un schéma commun
    • Fan de Oban en Elixir
    • Comme il existe des bibliothèques compatibles Sidekiq dans plusieurs langages, une approche similaire pour les files de tâches basées sur PostgreSQL serait utile
    • Il serait possible de développer une bibliothèque centrale de file de tâches en Rust et d’envisager des bindings par langage
  • Favorable à l’usage de Postgres pour tout, et pousse cela au maximum dans ses projets
    • Souhaite une file de tâches Postgres capable de gérer des pipelines à plusieurs étapes, du fan-out et de l’agrégation
    • Une base de données relationnelle structurée est particulièrement bien adaptée pour modéliser cela
    • La taille maximale de payload de 8k de listen/notify est une limite
    • Souhaite des tables de streaming et une prise en charge riche des types
  • Recommande un bon épisode de PostgresFM sur l’implémentation de files dans Postgres
  • PgQueuer intègre bien les appels RPC Postgres, les triggers et les cron jobs (pg_cron)
  • La bibliothèque River mérite aussi d’être examinée
    • Prend en charge les tâches planifiées, entre autres
    • Fournit aussi une interface utilisateur pour le débogage
  • Utilise Broadcaster pour les tâches PUB/SUB
  • Exemple de file de tâches le plus simple dans MySQL
    • Utilise la syntaxe update job_table set key=value where ... limit 1
    • C’est simple et atomique
    • PostgreSQL n’autorise pas la syntaxe update ... limit
  • Utilisateur de MySQL, mais en train d’explorer PostgreSQL
    • Offre de nombreuses fonctionnalités par défaut
    • Outil très intéressant
  • Il existe aussi la bibliothèque Procrastinate
    • Utilise LISTEN/NOTIFY de PostgreSQL (désactivable en option, avec possibilité d’utiliser du polling)
    • Prend en charge les tâches synchrones et asynchrones, les tâches périodiques, les tentatives de réessai, le verrouillage des tâches, les priorités, l’annulation/l’interruption des tâches, ainsi que l’intégration Django (optionnelle)
    • En est l’un des co-mainteneurs