Tengo una aplicación Flask-SQLAlchmey ejecutándose en Gunicorn conectada a una base de datos PostgreSQL, y tengo problemas para averiguar cuál pool_size
debería ser el valor y cuántas conexiones de base de datos debería esperar.
Esta es mi comprensión de cómo funcionan las cosas:
- Los procesos en Python 3.7 NO comparten memoria
- Cada trabajador de Gunicorn es su propio proceso.
- Por lo tanto, cada trabajador de Gunicorn obtendrá su propia copia del grupo de conexiones de la base de datos y no se compartirá con ningún otro trabajador
- Los hilos en Python comparten memoria
- Por lo tanto, cualquier subproceso dentro de un trabajador de Gunicorn compartirá un grupo de conexiones de base de datos
¿Es eso correcto hasta ahora? Si eso es correcto, entonces para una aplicación Flask sincrónica que se ejecuta en Gunicorn:
- ¿Es el número máximo de conexiones de base de datos = (número de trabajadores) * (número de subprocesos por trabajador)?
- Y dentro de un trabajador, ¿usará alguna vez más conexiones de un grupo de las que hay trabajadores?
¿Hay alguna razón por la cual pool_size
debería ser mayor que la cantidad de hilos? Entonces, para una aplicación gunicorn lanzada con gunicorn --workers=5 --threads=2 main:app
debería pool_size
ser 2? Y si solo estoy usando trabajadores, y no estoy usando hilos, ¿hay alguna razón para tener pool_size
más de 1?
fuente