Deploy drhider / validate (push) Waiting to run
- api_bp.py: try/except GeneratorExit после каждого yield в generate() - при F5 во время обработки поток освобождается, остальные файлы не обрабатываются - bump: 0.0.17 → 0.0.18
2.0 KiB
2.0 KiB
SSE: отлов отключения клиента, v0.0.18
Дата: 2026-07-14
Версия: 0.0.17 → 0.0.18
Проблема
После 2-3 F5 во время обработки — загрузка падает с «Ошибка загрузки: Сеть». Причина: утечка потоков.
Механика
process_streamсоздаёт SSE-генератор, занимающий поток Waitress (всего 8)obfuscate_files()выполняется ~30 сек (LLM-запросы)- Пользователь делает F5 → TCP-соединение рвётся
- Генератор не знает что клиент отключился — продолжает обрабатывать файлы
- Поток занят, не освобождается
- 2-3 F5 → все 8 потоков заняты → новые запросы не принимаются → «Сеть»
Почему WSGI не отключает
yield в генераторе пишет в буфер WSGI, а не в сокет. Буфер никуда не уходит
(клиент отключён), но генератор об этом не узнаёт — GeneratorExit не кидается.
Решение
Добавлен try/except GeneratorExit после каждого yield в generate():
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"