# SSE: отлов отключения клиента, v0.0.18 **Дата:** 2026-07-14 **Версия:** 0.0.17 → 0.0.18 --- ## Проблема После 2-3 F5 во время обработки — загрузка падает с «Ошибка загрузки: Сеть». Причина: утечка потоков. ### Механика 1. `process_stream` создаёт SSE-генератор, занимающий поток Waitress (всего 8) 2. `obfuscate_files()` выполняется ~30 сек (LLM-запросы) 3. Пользователь делает F5 → TCP-соединение рвётся 4. Генератор **не знает** что клиент отключился — продолжает обрабатывать файлы 5. Поток занят, не освобождается 6. 2-3 F5 → все 8 потоков заняты → новые запросы не принимаются → «Сеть» ### Почему WSGI не отключает `yield` в генераторе пишет в буфер WSGI, а не в сокет. Буфер никуда не уходит (клиент отключён), но генератор об этом не узнаёт — `GeneratorExit` не кидается. --- ## Решение Добавлен `try/except GeneratorExit` после каждого `yield` в `generate()`: ```python try: yield f"event: done..." except GeneratorExit: return # клиент отключился, освобождаем поток, НЕ обрабатываем остальные файлы ``` Waitress при отключении клиента кидает `GeneratorExit` при попытке записи в закрытый сокет. Генератор ловит → выходит → поток освобождается. --- ## Изменённые файлы - `site/routes/api_bp.py` — `try/except GeneratorExit` в `generate()` - `site/app.py` — `VERSION = "0.0.18"`