fix: SSE blockiert gunicorn-Worker - auf gthread umstellen

Mit 4 synchronen Workern hielt jede SSE-Verbindung dauerhaft einen
ganzen Worker besetzt. 4 offene Browser-Tabs -> alle anderen
Requests blockiert -> "Dateien laden dauert ewig".

Loesung: gthread worker-class mit 2 Workern x 16 Threads = 32
gleichzeitige Slots. Lang laufende SSE-Streams belegen nur je
einen Thread, regulaere Requests laufen unbeeintraechtigt.

nginx.example.conf: separater Location-Block fuer /api/sync/events
mit proxy_buffering off und 24h Read-Timeout, damit die Events
sofort durchkommen und die Verbindung nicht abbricht.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
Stefan Hacker
2026-04-12 10:33:02 +02:00
parent 5f905b4925
commit 3af2bc3312
2 changed files with 23 additions and 1 deletions
+6 -1
View File
@@ -35,4 +35,9 @@ ENV UPLOAD_PATH=/app/data/files
EXPOSE 5000
CMD ["gunicorn", "--bind", "0.0.0.0:5000", "--workers", "4", "--timeout", "120", "wsgi:application"]
# gthread worker class so SSE long-poll connections don't starve regular requests.
# 2 workers x 16 threads = 32 concurrent slots; each SSE client just holds one thread.
CMD ["gunicorn", "--bind", "0.0.0.0:5000", \
"--worker-class", "gthread", "--workers", "2", "--threads", "16", \
"--timeout", "120", "--keep-alive", "65", \
"wsgi:application"]