Skip to main content

classic-pg-listener

Библиотека дает простой класс Listener для добавления реакций на уведомления, передаваемые PostgreSQL при использовании команд LISTEN и NOTIFY.

Для использования необходимо передать функцию-фабрику, порождающую соединение. Соединение должно быть с autocommit=True.

Для добавления коллбеков используется метод .add_callback(). В него следует передать коллбек и название канала. Коллбек будет вызван при приеме уведомления в соответствующем канале.

Методом .remove_callback() можно убрать коллбек, если он больше не нужен.

Например:

from classic.pg.listener import Listener
from psycopg import connect, Notify

listener = Listener(
lambda: connect(
user='test',
password='test',
host='127.0.0.1',
port='5432',
dbname='test',
autocommit=True,
)
)

def some_task(notify: Notify):
print(notify)

listener.add_callback(some_task, 'some_channel')
listener.run()

Может работать в двух режимах:

  • "Блокирующий режим". При нем исполнение происходит в текущем потоке. Для этого используется блокирующий метод .run()

  • "Фоновый режим". При нем запускается внутренний поток для обслуживания соединения с базой и приема сообщений. В этом режиме класс похож на класс Thread из модуля threading. Метод .start() запускает фоновый поток, в котором происходит установка и обслуживание соединения, метод .stop() используется для запроса остановки фонового потока, методом .join() можно дождаться остановки внутреннего потока.

Пример использования в фоновом режиме:

from classic.pg.listener import Listener
from psycopg import connect, Notify

listener = Listener(
lambda: connect(
user='test',
password='test',
host='127.0.0.1',
port='5432',
dbname='test',
autocommit=True,
)
)

def some_task(notify: Notify):
print(notify)

listener.add_callback(some_task, 'some_channel')
listener.start()

print('Основной поток все еще свободен!')

listener.stop()
listener.join() # Дожидается остановки

Коллбеки, назначенные каналам, по умолчанию выполняются во внутреннем ThreadPoolExecutor. Параметром max_workers в конструкторе можно повлиять на размер пула. При max_workers исполнение будет происходить без пула, в том же потоке, что и обслуживает соединение. Таким образом, при запуске через метод .run() и значении max_workers=0 все, и обслуживание соединения, и исполнение коллбека будет происходить в одном потоке.

Методы .add_callback() и .remove_callback() выполняют свою работу не сразу. Оба метода возвращают future, в результате которого будет None, если добавление произошло успешно, либо выкинет исключение, произошедшее в потоке, обслуживающем слушателя.

Listener умеет регулярно опрашивать БД, в случае, если обновления не приходят в определённый период. Период устанавливается параметром ping_period в конструкторе Listener. По умолчанию 1 минута. Если ping_period=0, то проверка выполняться не будет.

Metadata

Release files for classic-pg-listener 1.2.9

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for classic-pg-listener 1.2.9
File Size Uploaded Provenance
classic_pg_listener-1.2.9.tar.gz 7.2 kB Without provenance Details

Release files / classic_pg_listener-1.2.9.tar.gz

Download URL classic_pg_listener-1.2.9.tar.gz
Size 7.2 kB
Tags Source
SHA-256 checksum
How to use checksums
97ac695ec4cfe11fec635f38212ea8b523776be7fb788a8ff7a09d94e6646bc5
BLAKE2b-256 checksum
How to use checksums
f081f6c8a29d478dd6995d777fee4328d0e8ca49a4823870d9eb28984ce97da2
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.10.13

Security for classic-pg-listener 1.2.9

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

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