diff --git a/web/views/main_view.py b/web/views/main_view.py index 1483714..53f1656 100644 --- a/web/views/main_view.py +++ b/web/views/main_view.py @@ -472,21 +472,26 @@ class MainView: def _poll_loop(self): prev: dict = {} + fails = 0 try: while True: try: jobs = self.client.list_jobs() - except (ApiError, Exception): - break - self._render_jobs(jobs) - state = {j["id"]: (j["done_items"], j["status"]) for j in jobs} - if state != prev: - prev = state - self._refresh_library() # там же page.update() - else: - self.page.update() - if not any(j["status"] in ("queued", "running") for j in jobs): - break + self._render_jobs(jobs) + state = {j["id"]: (j["done_items"], j["status"]) for j in jobs} + if state != prev: + prev = state + self._refresh_library() # там же page.update() + else: + self.page.update() + fails = 0 + if not any(j["status"] in ("queued", "running") for j in jobs): + break + except Exception: + # обрыв сети/перезапуск api — не глушим опрос, пробуем ещё + fails += 1 + if fails >= 10: + break time.sleep(3) finally: self._polling = False