РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
489 of 711 menu

Класс SingletonThreadPool

Класс SingletonThreadPool создает пул соединений, который поддерживает ровно одно соединение для каждого потока. При запросе соединения из потока пул проверяет, есть ли уже соединение, привязанное к этому потоку. Если соединение существует, оно возвращается повторно. Если соединения нет, создается новое и сохраняется в словаре по идентификатору потока. Такой пул удобен для SQLite при работе с файловой базой в многопоточном режиме, когда каждый поток должен использовать собственное соединение. Первым параметром передается функция создателя соединения creator, которая возвращает объект соединения с базой данных. Параметр pool_size задает максимальное количество соединений в пуле и по умолчанию равен 5.

Синтаксис

SingletonThreadPool(creator, [pool_size])

Пример

Давайте создадим пул SingletonThreadPool и получим из него соединение:

import sqlite3 from sqlalchemy.pool import SingletonThreadPool def creator(): return sqlite3.connect(':memory:') pool = SingletonThreadPool(creator) conn = pool.connect() print(conn) conn.close()

Результат выполнения кода:

"<sqlite3.Connection object at ...>"

Пример

Давайте убедимся, что в одном потоке пул возвращает одно и то же соединение:

import sqlite3 from sqlalchemy.pool import SingletonThreadPool def creator(): return sqlite3.connect(':memory:') pool = SingletonThreadPool(creator) conn1 = pool.connect() conn2 = pool.connect() print(conn1 is conn2) conn1.close() conn2.close()

Результат выполнения кода:

True

Пример

Давайте создадим движок SQLite, который использует SingletonThreadPool через параметр poolclass:

from sqlalchemy import create_engine from sqlalchemy.pool import SingletonThreadPool engine = create_engine( 'sqlite:///:memory:', poolclass=SingletonThreadPool ) print(engine.pool)

Результат выполнения кода:

"SingletonThreadPool(size=5)"

Пример

Давайте выполним запрос через движок с SingletonThreadPool:

from sqlalchemy import create_engine, text from sqlalchemy.pool import SingletonThreadPool engine = create_engine( 'sqlite:///:memory:', poolclass=SingletonThreadPool ) with engine.connect() as conn: res = conn.execute(text('SELECT 1')) print(res.scalar())

Результат выполнения кода:

1

Смотрите также

  • класс SingletonThreadPool,
    который хранит по одному соединению на поток
  • класс StaticPool,
    который хранит единственное соединение для всех потоков
  • класс QueuePool,
    который поддерживает очередь соединений
  • функцию create_engine,
    которая создает движок с указанным пулом
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить