Как мне установить pool_timeout в бесконечность в SQLAlchemy? - PullRequest
0 голосов
/ 04 декабря 2018

Я создаю API для клиента, который получает несколько запросов одновременно.Каждому запросу необходим доступ к базе данных PostgreSQL, и поэтому я использую пул соединений для обработки одновременных запросов.

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

Я использую API-интерфейс SQLAlchemy для обработки соединений с базой данных и пула, и я вижу параметр pool_timeout в методе sqlalchemy.create_engine, который дословно указан в кавычках, «количество секунд ожидания перед предоставлением»на получение соединения из пула. "

Есть ли способ установить время ожидания бесконечности (т.е. отключить время ожидания), установив значение (например, -1) для этого параметра?Я не смог найти ничего по этому поводу в документации.

1 Ответ

0 голосов
/ 20 мая 2019

Я немного покопался в этом сегодня и обнаружил, что тайм-аут заканчивается тем, что он передается объекту очереди (https://github.com/sqlalchemy/sqlalchemy/blob/master/lib/sqlalchemy/pool/impl.py#L97, https://github.com/sqlalchemy/sqlalchemy/blob/master/lib/sqlalchemy/pool/impl.py#L117),, который будет блокироваться навсегда, если для тайм-аута задано значение Нет).:

Если необязательные аргументы block имеют значение True, а timeout - None (по умолчанию), блокируйте при необходимости, пока элемент не доступен. Если timeout - положительное число, оно блокируется вбольшинство timeout секунд и вызывает исключение Empty, если в течение этого времени ни один элемент не был доступен. В противном случае (block имеет значение false), возвращает элемент, если он доступен сразу, в противном случае выдается исключение Empty (timeout)в этом случае игнорируется).

(от https://github.com/sqlalchemy/sqlalchemy/blob/c785a528ea200a8905d1b5d7ab4088d501606d2b/lib/sqlalchemy/util/queue.py#L135)

...