UI: опрос задач переживает обрывы сети/перезапуск api
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
@@ -472,21 +472,26 @@ class MainView:
|
|||||||
|
|
||||||
def _poll_loop(self):
|
def _poll_loop(self):
|
||||||
prev: dict = {}
|
prev: dict = {}
|
||||||
|
fails = 0
|
||||||
try:
|
try:
|
||||||
while True:
|
while True:
|
||||||
try:
|
try:
|
||||||
jobs = self.client.list_jobs()
|
jobs = self.client.list_jobs()
|
||||||
except (ApiError, Exception):
|
self._render_jobs(jobs)
|
||||||
break
|
state = {j["id"]: (j["done_items"], j["status"]) for j in jobs}
|
||||||
self._render_jobs(jobs)
|
if state != prev:
|
||||||
state = {j["id"]: (j["done_items"], j["status"]) for j in jobs}
|
prev = state
|
||||||
if state != prev:
|
self._refresh_library() # там же page.update()
|
||||||
prev = state
|
else:
|
||||||
self._refresh_library() # там же page.update()
|
self.page.update()
|
||||||
else:
|
fails = 0
|
||||||
self.page.update()
|
if not any(j["status"] in ("queued", "running") for j in jobs):
|
||||||
if not any(j["status"] in ("queued", "running") for j in jobs):
|
break
|
||||||
break
|
except Exception:
|
||||||
|
# обрыв сети/перезапуск api — не глушим опрос, пробуем ещё
|
||||||
|
fails += 1
|
||||||
|
if fails >= 10:
|
||||||
|
break
|
||||||
time.sleep(3)
|
time.sleep(3)
|
||||||
finally:
|
finally:
|
||||||
self._polling = False
|
self._polling = False
|
||||||
|
|||||||
Reference in New Issue
Block a user