Тайм-аут соединителя Python MySQL: как обрабатывать тайм-ауты соединения и запросов

Метод 1: установка времени ожидания подключения

import mysql.connector
config = {
    'user': 'your_username',
    'password': 'your_password',
    'host': 'your_host',
    'database': 'your_database',
    'connection_timeout': 10  # Set the connection timeout value in seconds
}
try:
    connection = mysql.connector.connect(config)
    # Perform database operations
except mysql.connector.Error as error:
    print("Error: {}".format(error))
finally:
    if 'connection' in locals():
        connection.close()

Метод 2: установка времени ожидания запроса

import mysql.connector
config = {
    'user': 'your_username',
    'password': 'your_password',
    'host': 'your_host',
    'database': 'your_database',
}
try:
    connection = mysql.connector.connect(config)
    cursor = connection.cursor()
    cursor.execute("SET SESSION MAX_EXECUTION_TIME=10000")  # Set query timeout to 10 seconds
    cursor.execute("SELECT * FROM your_table")
    result = cursor.fetchall()
    # Process the query result
except mysql.connector.Error as error:
    print("Error: {}".format(error))
finally:
    if 'connection' in locals():
        connection.close()

Метод 3: использование параметра времени ожидания соединения

import mysql.connector
config = {
    'user': 'your_username',
    'password': 'your_password',
    'host': 'your_host',
    'database': 'your_database',
}
try:
    connection = mysql.connector.connect(config, connect_timeout=10)  # Set connection timeout to 10 seconds
    # Perform database operations
except mysql.connector.Error as error:
    print("Error: {}".format(error))
finally:
    if 'connection' in locals():
        connection.close()

Метод 4. Использование декоратора тайм-аута

import mysql.connector
import signal
class TimeoutError(Exception):
    pass
def timeout_handler(signum, frame):
    raise TimeoutError("Timeout occurred")
def query_with_timeout(query, timeout):
    signal.signal(signal.SIGALRM, timeout_handler)
    signal.alarm(timeout)
    try:
        connection = mysql.connector.connect(user='your_username', password='your_password', host='your_host', database='your_database')
        cursor = connection.cursor()
        cursor.execute(query)
        result = cursor.fetchall()
        return result
    except TimeoutError:
        print("Query timeout")
    except mysql.connector.Error as error:
        print("Error: {}".format(error))
    finally:
        signal.alarm(0)
# Usage
result = query_with_timeout("SELECT * FROM your_table", 10)  # Set timeout to 10 seconds

Это некоторые методы, которые вы можете использовать для обработки тайм-аутов при использовании MySQL Connector в Python. Выберите метод, который лучше всего соответствует вашим требованиям.