SQLAlchemy aumenta el límite de QueuePool de tamaño 10 desbordamiento 10 alcanzado, el tiempo de espera de la conexión ha expirado después de algún tiempo

Al utilizar Flask-SQLAlchemy, aparece el error “Se ha alcanzado el límite de QueuePool de tamaño 10 para el desbordamiento 10, la conexión se ha agotado” después de algún tiempo. Intenté boost el tamaño de la agrupación de conexiones, pero solo aplazó el problema.

def create_app(config_name): app = Flask(__name__) app.config.from_object(config[config_name]) config[config_name].init_app(app) initialize_db(app) db = SQLAlchemy() def initialize_db(app): db.init_app(app) SQLALCHEMY_POOL_SIZE = 100 

Resolví el problema. A veces, el problema era que la conexión de la base de datos iba a perder el estado, lo que hace que el tamaño de la agrupación se agote después de algún intervalo.
Para solucionar el problema, hice el cambio de configuración del servidor MySQL para el tiempo de espera de consulta y lo hice en 1 segundo.
Después de 1 segundo, si la consulta no respondió, se lanzará una excepción y agregué, excepto el bloque en el código donde se invocó esa consulta (en mi caso, fue la consulta GET). En el bloque Excepto, emití el comando rollback.

Acabo de tener este problema.


Mi situación

  • Todavía no he lanzado mi sitio web, por lo que paso casi todo el tiempo interactuando con la versión local, que se ejecuta desde PyCharm (es decir, en mi computadora), por lo que solo noté el error en mi versión local de sitio, y ni siquiera intenté ver si también se produciría en la versión de producción alojada en PythonAnywhere del sitio.
  • Estoy usando una base de datos MySQL.
  • IIRC Noté el problema por primera vez cuando comencé a ejecutar llamadas frecuentes a la API desde mi front-end JavaScript.
  • Tuve debug=False en mi app.run() , por lo que no fue causado por debug=True , que es algo que se sugiere en otra parte.

Como lo arregle

El problema desapareció cuando me deshice de threaded=True en mi app.run() .

  • Entonces, anteriormente se veía así:
    • app.run(debug=False, threaded=True)
  • y lo cambié para parecerme a esto:
    • app.run(debug=False)