# gunicorn.conf.py # Host/port are read from settings.json — no duplication needed. import json from pathlib import Path _s = json.loads((Path(__file__).parent / "settings.json").read_text()) _d = _s["dashboard"] bind = f"{_d['host']}:{_d['port']}" workers = 1 # must be 1 — shared in-process state (USBRead threads) threads = 4 worker_class = "gthread" timeout = 30 accesslog = "-" errorlog = "-" loglevel = "info"