8 pontos por GN⁺ 2024-08-19 | 1 comentários | Compartilhar no WhatsApp
  • PgQueuer é uma biblioteca minimalista/de alto desempenho de fila de tarefas para Python que aproveita a robustez do PostgreSQL
  • Foi projetada para simplicidade e eficiência, usando LISTEN/NOTIFY do PostgreSQL para gerenciar filas de tarefas com facilidade

Recursos

  • Integração simples: pode ser integrada facilmente a aplicações Python existentes que usam PostgreSQL
  • Tratamento eficiente de concorrência: usa FOR UPDATE SKIP LOCKED do PostgreSQL para permitir um processamento de tarefas confiável e concorrente
  • Notificações em tempo real: utiliza LISTEN e NOTIFY para fornecer atualizações em tempo real sobre mudanças no estado das tarefas

Resumo do GN⁺

  • O PgQueuer permite gerenciar filas de tarefas com eficiência em aplicações Python ao aproveitar os recursos LISTEN/NOTIFY do PostgreSQL.
  • Oferece integração simples e tratamento eficiente de concorrência, podendo ser aplicado facilmente a sistemas existentes.
  • Com notificações em tempo real, é possível verificar imediatamente o estado das tarefas, facilitando o gerenciamento.
  • Outros projetos com funcionalidades semelhantes incluem RQ e Celery.

1 comentários

 
GN⁺ 2024-08-19
Comentários no Hacker News
  • Pergunta sobre comparação com a biblioteca Graphile Worker
  • Reflexão sobre a possibilidade de bibliotecas de fila de tarefas baseadas em PostgreSQL compartilharem um esquema comum
    • Sou fã do Oban, de Elixir
    • Assim como existem bibliotecas compatíveis com Sidekiq em várias linguagens, uma abordagem semelhante para filas de tarefas baseadas em PostgreSQL seria útil
    • Poderia ser considerada a criação de uma biblioteca central de fila de tarefas em Rust com bindings por linguagem
  • Apoio usar Postgres para tudo e estou levando isso ao máximo no meu projeto
    • Quero uma fila de tarefas em Postgres que faça pipelines em múltiplas etapas, fan-out e acumulação
    • Um banco de dados relacional estruturado é especialmente adequado para modelar isso
    • O tamanho máximo de payload de 8k do listen/notify é limitante
    • Quero tabelas de streaming e suporte rico a tipos
  • Recomendação de um bom episódio do PostgresFM sobre implementar filas no Postgres
  • O PgQueuer integra bem chamadas RPC do Postgres, triggers e cronjobs (pg_cron)
  • Vale a pena conferir também a biblioteca River
    • Suporta tarefas agendadas etc.
    • Também oferece uma UI para depuração
  • Estou usando o Broadcaster para tarefas de PUB/SUB
  • Exemplo da fila de tarefas mais simples no MySQL
    • Usa a sintaxe update job_table set key=value where ... limit 1
    • É simples e atômica
    • O PostgreSQL não permite a sintaxe update ... limit
  • Sou usuário de MySQL, mas estou explorando PostgreSQL
    • Ele oferece muitos recursos nativamente
    • É uma ferramenta muito interessante
  • Também existe a biblioteca Procrastinate
    • Usa LISTEN/NOTIFY do PostgreSQL (pode ser desativado opcionalmente e usar polling)
    • Suporta tarefas síncronas e assíncronas, tarefas periódicas, retries, bloqueio de tarefas, prioridade, cancelamento/interrupção de tarefas e integração com Django (opcional)
    • Sou co-mantenedor do Procrastinate