Spec-Zone.ru › MySQL Connectors 1.0

9.5 Пулы подключений Connector/Python

Поддерживается простой пул подключений со следующими характеристиками:

  • Модуль mysql.connector.pooling реализует пул.

  • Пул открывает определенное количество подключений и обрабатывает безопасность потоков при предоставлении подключений запрашивающим.

  • Размер пула подключений настраивается при создании пула. Он не может быть изменен после этого.

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

  • Имя пула подключений может быть получено из самого пула подключений или подключений, полученных из него.

  • Можно иметь несколько пулов подключений. Это позволяет приложениям поддерживать пулы подключений к различным серверам MySQL, например.

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

  • Можно переконфигурировать параметры подключения, используемые пулом. Они применяются к подключениям, полученным из пула после этого. Переконфигурация отдельных подключений, полученных из пула, вызовом метода подключения config() не поддерживается.

Приложения, которые могут извлечь выгоду из возможности пула подключений, включают:

  • Программное обеспечение среднего уровня, которое поддерживает несколько подключений к нескольким серверам MySQL и требует, чтобы подключения были доступны.

  • Веб-сайты, которые могут иметь больше «постоянных» подключений к серверу MySQL.

Пул подключений можно создать неявно или явно.

Для создания пула подключений неявно: Откройте подключение и укажите один или несколько аргументов, связанных с пулом (pool_name, pool_size). Например:

dbconfig = {
  "database": "test",
  "user":     "joe"
}

cnx = mysql.connector.connect(pool_name = "mypool",
                              pool_size = 3,
                              **dbconfig)

Имя пула ограничено алфавитно-цифровыми символами и специальными символами ., _, *, $ и #. Имя пула должно быть не более pooling.CNX_POOL_MAXNAMESIZE символов (по умолчанию 64).

Размер пула должен быть больше 0 и меньше или равен pooling.CNX_POOL_MAXSIZE (по умолчанию 32).

При наличии аргумента pool_name или pool_size Connector/Python создает новый пул. Если аргумент pool_name не задан, вызов connect() автоматически генерирует имя, составленное из любых заданных аргументов подключения host, port, user и database в указанном порядке. Если аргумент pool_size не задан, размер по умолчанию составляет 5 подключений.

Последующие вызовы connect() с тем же именем пула подключений возвращают подключения из существующего пула. Любые аргументы pool_size или параметры подключения игнорируются, поэтому следующие вызовы connect() эквивалентны исходному вызову connect(), показанному ранее:

cnx = mysql.connector.connect(pool_name = "mypool", pool_size = 3)
cnx = mysql.connector.connect(pool_name = "mypool", **dbconfig)
cnx = mysql.connector.connect(pool_name = "mypool")

Подключения из пула, полученные путем вызова connect() с аргументом, связанным с пулом, имеют класс PooledMySQLConnection (см. Раздел 10.4, «Класс pooling.PooledMySQLConnection»). Объекты подключений с пулом PooledMySQLConnection похожи на объекты подключений без пула MySQLConnection, с этими отличиями:

  • Чтобы освободить подключение из пула, полученное из пула подключений, вызовите его метод close(), как и для любого непулового подключения. Однако для подключений из пула, close() фактически не закрывает подключение, а возвращает его в пул, делая его доступным для последующих запросов на подключение.

  • Подключение из пула нельзя переконфигурировать с помощью метода config(). Изменения подключения должны выполняться через сам объект пула, как описано ниже.

  • Подключение из пула имеет свойство pool_name, которое возвращает имя пула.

Для создания пула подключений явно: Создайте объект MySQLConnectionPool (см. Раздел 10.3, «Класс pooling.MySQLConnectionPool»):

dbconfig = {
  "database": "test",
  "user":     "joe"
}

cnxpool = mysql.connector.pooling.MySQLConnectionPool(pool_name = "mypool",
                                                      pool_size = 3,
                                                      **dbconfig)

Для запроса подключения из пула используйте его метод get_connection():

cnx1 = cnxpool.get_connection()
cnx2 = cnxpool.get_connection()

При явном создании пула подключений можно использовать метод объекта пула set_config() для переконфигурации параметров подключения пула:

dbconfig = {
  "database": "performance_schema",
  "user":     "admin",
  "password": "password"
}

cnxpool.set_config(**dbconfig)

Подключения, запрошенные из пула после изменения конфигурации, используют новые параметры. Подключения, полученные до изменения, остаются неизменными, но когда они закрываются (возвращаются в пул), они повторно открываются с новыми параметрами перед возвращением пулом для последующих запросов на подключение.

© 2025 Oracle
Licensed under the GPLv2 License.
https://docs.oracle.com/cd/E17952_01/connector-python-en/connector-python-connection-pooling.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API