31 lines
1.1 KiB
Python
31 lines
1.1 KiB
Python
"""Общее состояние сессий: хранилище, блокировка, константы, TTL-таймер.
|
|
|
|
Единая точка хранения состояния — все операции импортируют её.
|
|
Дробить state.py на файл-на-переменную не нужно: это данные, а не функции.
|
|
"""
|
|
|
|
import threading
|
|
|
|
# TTL сессии: 30 минут
|
|
TTL_SECONDS = 30 * 60
|
|
|
|
# Максимальный объём одного файла и суммарный объём файлов в сессии (защита памяти)
|
|
MAX_FILE_BYTES = 50 * 1024 * 1024 # 50 MB на один файл
|
|
MAX_SESSION_BYTES = 500 * 1024 * 1024 # 500 MB суммарно на сессию
|
|
|
|
_sessions: dict = {}
|
|
_lock = threading.Lock()
|
|
|
|
|
|
def _start_timer(sid: str) -> threading.Timer:
|
|
"""Запустить таймер автоочистки сессии через TTL."""
|
|
|
|
def _clean():
|
|
with _lock:
|
|
_sessions.pop(sid, None)
|
|
|
|
timer = threading.Timer(TTL_SECONDS, _clean)
|
|
timer.daemon = True
|
|
timer.start()
|
|
return timer
|