Files
loadtest/History/2026-07-10-sonnet-answer-flask.md
T
2026-07-10 23:08:50 +04:00

1.4 KiB

2026-07-10 — Ответ Соннета: Werkzeug dev server + chunked TE = гонка

Диагноз

Werkzeug dev server не умеет корректно работать с chunked transfer encoding от nginx. При proxy_request_buffering: off nginx шлёт тело чанками. Flask отвечает Connection: close → nginx ещё шлёт чанк → RST → таймаут.

nginx:alpine держит keep-alive → проблемы нет.

Решение

Gunicorn вместо Werkzeug dev server. Правильно де-чанкует тело, держит persistent connections.

Способ

Shturval запускает python app.py. Вместо app.run() — Gunicorn через Python API:

if __name__ == '__main__':
    import gunicorn.app.base
    class StandaloneApp(gunicorn.app.base.BaseApplication):
        def __init__(self, app, options=None):
            self.application = app
            self.options = options or {}
            super().__init__()
        def load_config(self):
            for k, v in self.options.items():
                self.cfg.set(k, v)
        def load(self):
            return self.application
    StandaloneApp(app, {
        'bind': '0.0.0.0:5000',
        'workers': 2,
        'timeout': 300,
    }).run()

requirements.txt уже содержит gunicorn. Dockerfile CMD можно убрать (Shturval всё равно переопределяет).