Каков эффект более длинных / коротких тайм-аутов в psycopg2 select.select (...)? - PullRequest
0 голосов
/ 07 марта 2020

Я использую следующий код (найденный в Интернете), чтобы перехватить изменения (в базе данных срабатывает триггер, который отправляет NOTIFY) в таблицу PostgreSQL из Python с использованием psycopg2:

import select
import psycopg2
import psycopg2.extensions
from config import config

params = config()
conn = psycopg2.connect(**params)
conn.set_isolation_level(psycopg2.extensions.ISOLATION_LEVEL_AUTOCOMMIT)

curs = conn.cursor()

# Run SQL LISTEN command on channel "section_change"
curs.execute("LISTEN section_change;")

print("")
print("Waiting for section changes ...")
print("")
while True:
    if select.select([conn],[],[],10) == ([],[],[]):
        pass
        print("Timeout")
    else:
        conn.poll()
        while conn.notifies:
            # Section change notification caught
            notify = conn.notifies.pop(0)
            if notify.channel == "section_change":
                print("Section change occurred")

В данный момент тайм-аут установлен на 10 секунд (четвертый параметр для выбора. Выбрать). Я попытался пропустить оператор if (отключение тайм-аута), который привел к 100% -ному использованию ЦП (соответственно ядра), так что это бесполезно.

Как влияет длительность тайм-аута?

Я хочу хорошую отзывчивость и низкое потребление процессора; помогут более низкие или более высокие значения времени ожидания?

...