Ich habe eine Flask-SQLAlchmey-App in Gunicorn, die mit einer PostgreSQL-Datenbank verbunden ist, und ich habe Probleme herauszufinden, wie hoch der pool_size
Wert sein sollte und wie viele Datenbankverbindungen ich erwarten sollte.
So verstehe ich, wie die Dinge funktionieren:
- Prozesse in Python 3.7 teilen NICHT den Speicher
- Jeder Gunicorn-Arbeiter ist ein eigener Prozess
- Daher erhält jeder Gunicorn-Mitarbeiter eine eigene Kopie des Datenbankverbindungspools und wird nicht mit anderen Mitarbeitern geteilt
- Threads in Python teilen sich den Speicher
- Daher teilen sich alle Threads in einem Gunicorn-Mitarbeiter einen Datenbankverbindungspool
Ist das soweit richtig? Wenn das richtig ist, dann für eine synchrone Flask-App, die in Gunicorn ausgeführt wird:
- Ist die maximale Anzahl von Datenbankverbindungen = (Anzahl der Worker) * (Anzahl der Threads pro Worker)?
- Und wird ein Arbeiter jemals mehr Verbindungen aus einem Pool verwenden, als es Arbeiter gibt?
Gibt es einen Grund, warum pool_size
größer als die Anzahl der Threads sein sollte? Also, für eine Gunicorn App gunicorn --workers=5 --threads=2 main:app
sollte pool_size
mit 2 gestartet werden? Und wenn ich nur Arbeiter benutze und keine Threads, gibt es einen Grund, eine pool_size
größer als 1 zu haben?
quelle