Verbindungspooling mit Python + MySQL

Wie man ein Verbindungspooling mit MySQL in Python durchführt und was man dagegen tun kann.

mysql-connector-python MySQLConnectionPool-Problem

Wenn Sie einfach eine Verbindung mit dem offiziellen MySQL Python-Client mysql-connector-python herstellen möchten, können Sie zunächst Folgendes schreiben:

import mysql.connector

cnx = mysql.connector.connect(host="...", user="...", password="...", database="...")

Diese MySQL-Connector-Python bietet eine Klasse namens MySQLConnectionPool, die das Pooling von Verbindungen vereinfacht. [^ MySQLConnectionPool]

from mysql.connector.pooling import MySQLConnectionPool

cnxpool = MySQLConnectionPool(host="...", user="...", password="...", database="...", pool_size=10)

cnx = cnxpool.get_connection()

cnx.close()  #Die Verbindung wird nicht getrennt und in den Verbindungspool freigegeben

Herzlichen Glückwunsch ... ** ist nicht der Fall. ** ** **

Versuchen Sie, den folgenden Code auszuführen.

from mysql.connector.pooling import MySQLConnectionPool

cnxpool = MySQLConnectionPool(host="...", user="...", password="...", database="...", pool_size=3)

cnxpool.get_connection()
cnxpool.get_connection()
cnxpool.get_connection()
cnxpool.get_connection()  #=> PoolError: Failed getting connection; pool exhausted

MySQLConnectionPool wurde entwickelt, um ** eine Ausnahme auszulösen, wenn die Poolverbindungen erschöpft sind **.

Ich hasse diese einfache Spezifikation nicht, aber wenn ich sie tatsächlich in einer Webanwendung verwende, ist es oft schön, das Verhalten zu haben, "auf die Freigabe einer anderen Verbindung zu warten". Andernfalls tritt ein Fehler auf, auch wenn die Anzahl der verarbeiteten parallelen Anforderungen die Poolgröße nur geringfügig überschreitet.

SQLAlchemy QueuePool-Lösung

Dieses Problem kann mit QueQPool von SQLAlchemy gelöst werden. [^ Warteschlangenpool]

from sqlalchemy.pool import QueuePool

cnxpool = QueuePool(lambda: mysql.connector.connect(host="...", user="...", password="...", database="..."), pool_size=10)

cnx = cnxpool.connect()

Es scheint, dass das erste Argument von QueuePool eine beliebige Funktion sein kann, die "Verbindungsobjekt entsprechend der DB-API" zurückgibt. Es ist vielseitig und erstaunlich.

Das Modul selbst mit dem Namen SQLAlchemy ist ORM, diesmal verwendet es jedoch nur den Mechanismus QueuePool, ohne den ORM-Teil zu verwenden.

Recommended Posts

Verbindungspooling mit Python + MySQL
Debuggen Sie die MySQL-Verbindung mit Python MySQL.connector
UDP gleichzeitige Verbindung mit Python
Erstellen Sie eine MySQL + Python-Umgebung mit Docker
FizzBuzz in Python3
Empfangen Sie Textdaten von MySQL mit Python
Scraping mit Python
INSERT in MySQL mit Python [Für Anfänger]
Scraping mit Python
Python mit Go
100 Bildverarbeitung mit Python Knock # 8 Max Pooling
Twilio mit Python
In Python integrieren
Stellen Sie mit Python in Docker eine Verbindung zu MySQL her
Spielen Sie mit 2016-Python
AES256 mit Python
Getestet mit Python
Python beginnt mit ()
mit Syntax (Python)
Bingo mit Python
Zundokokiyoshi mit Python
Lassen Sie uns MySQL-Daten mit Python bearbeiten
Die Bildverarbeitung mit Python 100 führt zu einem durchschnittlichen Pooling von # 7
Excel mit Python
Mikrocomputer mit Python
Mit Python besetzen
ODBC-Verbindung zu FileMaker 11 Server Advanced mit Python 3
Stellen Sie mit Python auf Raspberry Pi eine Verbindung zu MySQL her
[Einführung für Anfänger] Umgang mit MySQL mit Python
Serielle Kommunikation mit Python
Zip, entpacken mit Python
Django 1.11 wurde mit Python3.6 gestartet
Python mit Eclipse + PyDev.
Socket-Kommunikation mit Python
Datenanalyse mit Python 2
Scraping in Python (Vorbereitung)
Berühren Sie MySQL in Python 3
Versuchen Sie es mit Python.
Python lernen mit ChemTHEATER 03
Sequentielle Suche mit Python
"Objektorientiert" mit Python gelernt
Umgang mit Yaml mit Python
Löse AtCoder 167 mit Python
Serielle Kommunikation mit Python
[Python] Verwenden Sie JSON mit Python
Python lernen mit ChemTHEATER 05-1
Lerne Python mit ChemTHEATER
Führen Sie prepDE.py mit python3 aus
1.1 Erste Schritte mit Python
Tweets mit Python sammeln
Binarisierung mit OpenCV / Python
3. 3. KI-Programmierung mit Python
Kernel-Methode mit Python
Scraping mit Python + PhantomJS
Verwenden Sie MySQL aus Python
Fahren Sie WebDriver mit Python
[Python] Mit CGIHTTPServer umleiten
Sprachanalyse mit Python
Denken Sie an Yaml mit Python
Kinesis mit Python betreiben
Verwenden Sie DynamoDB mit Python