From e62e71ce7e9a6ac09a607bc05b47aa1604249c84 Mon Sep 17 00:00:00 2001 From: jze9 Date: Tue, 14 Jul 2026 17:43:26 +0500 Subject: [PATCH] =?UTF-8?q?UI:=20=D0=BE=D0=BF=D1=80=D0=BE=D1=81=20=D0=B7?= =?UTF-8?q?=D0=B0=D0=B4=D0=B0=D1=87=20=D0=BF=D0=B5=D1=80=D0=B5=D0=B6=D0=B8?= =?UTF-8?q?=D0=B2=D0=B0=D0=B5=D1=82=20=D0=BE=D0=B1=D1=80=D1=8B=D0=B2=D1=8B?= =?UTF-8?q?=20=D1=81=D0=B5=D1=82=D0=B8/=D0=BF=D0=B5=D1=80=D0=B5=D0=B7?= =?UTF-8?q?=D0=B0=D0=BF=D1=83=D1=81=D0=BA=20api?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Fable 5 --- web/views/main_view.py | 27 ++++++++++++++++----------- 1 file changed, 16 insertions(+), 11 deletions(-) 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