Skip to main content

Python client for pg_tasks

Клиент для pg_tasks.

Предоставляет классы Tasks и Worker для создания рабочих процессов.

Установка

pip install pg_tasks_python

Quickstart

Запустим расширение и создадим таблицу для задачи:

CRAETE EXTENSION pg_tasks;

CREATE TABLE tasks.do_something(
    LIKE tasks.template
        INCLUDING DEFAULTS
        INCLUDING IDENTITY
        INCLUDING INDEXES,
    payload text
);
SELECT tasks.register('tasks', 'do_something');

Опишем модуль на python:

from pg_tasks import Task, Worker
import psycopg


class DoSomething(Task):
    
    def __init__(self, conn_factory):
        super().__init__()
        self.conn_factory = conn_factory
    
    def run(self, id, **kwargs):
        # Представим себе, что здесь полезный код))
        print('DO HARD WORK')
        
        # Подтверждение выполнения задачи
        conn = None
        try:
            conn = self.conn_factory()
            self.finish(conn, task_id=id)
        finally:
            if conn is not None:
                conn.close()


# Композит
do_something = DoSomething(
    lambda: psycopg.connect('dbname=test'),
)

worker = Worker('dbname=test')
worker.add(do_something)

worker.run()

Task

Базовый класс для задач. Метод run должен быть переопределен, и содержать в себе саму задачу. Этот метод будет вызван при получении задач из БД.

Метод run принимает строку из БД в виде **kwargs. Все столбцы, описанные в соответствующей таблице, будут переданы в задачу.

После успешного завершения бизнес-логики задачу необходимо пометить как завершенную методом .finish(), передав в него id задачи и время начала задачи. В большинстве случаев достаточно передать created_at из kwargs.

В случае, когда задачу выполнить невозможно, и нужно повторить ее позже (например, задача должна обратиться к внешнему сервису, который сейчас недоступен), нужно вызвать метод retry, передав в него id задачи и, опционально, время, после которого задача должна быть выполнена.

В случае, когда задачу выполнить невозможно, нужно выполнить метод cancel, передав в него id задачи. Такая задача не будет доступна для повторения другим воркерам, пока не будет сброшена.

Метод reset используется для сброса задач, принимает id задачи. Нужен, в основном, для ручного перезапуска задач при авариях.

Метод clean принимает дату и время, и вычищает все задачи, успешно выполненные до указанной даты.

Все методы принимают первым обязательным аргументом подключение к БД, через которое задача будет работать с БД.

В случае, когда задача работает в транзакции, крайне рекомендуется после завершения бизнес-логики оперировать задачей (подтверждать, отменять и т.д.) в той же транзакции.

Также в методы finish, cancel, и retry можно передать комментарий к задаче в поле comment в виде строки, комментарий будет сохранен в БД.

Метод acquire нужен для вызова из Worker, напрямую он не используется.

Worker

Worker имеет 3 метода - add, remove и run.

Метод add используется для добавления новых типов задач. Вторым аргументом можно задать количество рабочих потоков, по умолчанию - 1. Если воркер уже запущен, то потоки будут запущены сразу, если нет - запуск будет отложен до запуска воркера.

Метод remove используется для остановки определенного типа задач.

Метод run запускает worker. Метод блокирующий, содержит в себе бесконечный цикл.

Внутри run делает несколько вещей.

Для каждого типа задачи запускается один или несколько рабочих потоков. Каждый рабочий поток циклически запрашивает пачку задач и последовательно выполняет их. Если получена пустая пачка, значит, задач к выполнению сейчас нет, и рабочий поток встает на паузу в ожидании уведомления о новой задаче. Если уведомление не приходит в интервал, заданный в задаче, то рабочий поток начинает цикл заново.

Также Worker создает поток-слушатель. Слушатель получает уведомления в канале pg_tasks, и уведомляет рабочие потоки о них. Также слушатель регулярно пингует DB, когда уведомлений нет больше определенного времени.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pg_tasks-0.0.2.tar.gz (10.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

pg_tasks-0.0.2-py3-none-any.whl (8.0 kB view details)

Uploaded Python 3

File details

Details for the file pg_tasks-0.0.2.tar.gz.

File metadata

  • Download URL: pg_tasks-0.0.2.tar.gz
  • Upload date:
  • Size: 10.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for pg_tasks-0.0.2.tar.gz
Algorithm Hash digest
SHA256 e5bba7d9c827ae932aee2f87bb2bacbdd1eaca323e20fd8c4660fc7ba4fc21a0
MD5 8a183ceafbb013026eeefb3f70a9abf4
BLAKE2b-256 68aaa9e26106e80760196aee9cb4f503abe3a1c72d2af3c1c80986191b7a7e43

See more details on using hashes here.

Provenance

The following attestation bundles were made for pg_tasks-0.0.2.tar.gz:

Publisher: publish.yml on variasov/pg-tasks-python

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pg_tasks-0.0.2-py3-none-any.whl.

File metadata

  • Download URL: pg_tasks-0.0.2-py3-none-any.whl
  • Upload date:
  • Size: 8.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for pg_tasks-0.0.2-py3-none-any.whl
Algorithm Hash digest
SHA256 6d38e69960918d0f7f69389ef28d45ac8833582c5b075806689925ad82324d0d
MD5 55b2237e6b95d1d91c9f3cef1f2a42e9
BLAKE2b-256 4f1d0e9d0c92bb80fa74084f8d9e8c61ebcc73428dd45c2b6d4533ecf5b6c782

See more details on using hashes here.

Provenance

The following attestation bundles were made for pg_tasks-0.0.2-py3-none-any.whl:

Publisher: publish.yml on variasov/pg-tasks-python

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Release history Release notifications | RSS feed

0.0.4

2 files

0.0.3

2 files

This release

0.0.2 This release

2 files

0.0.1

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page