1
0
mirror of https://github.com/0O0o0oOoO00/Alas.git synced 2026-05-14 11:19:26 +08:00

ref: use specialized counter to count failed tasks

This commit is contained in:
0O0o0oOoO00
2025-09-16 19:15:31 +08:00
parent 42e6f89ccd
commit 19a843b1f0

26
alas.py
View File

@@ -589,6 +589,23 @@ class AzurLaneAutoScript:
from module.luahook.crack import *
from module.scheduler_watcher import *
from datetime import datetime, timedelta
from module.counter import MaxCounter
from typing import Dict
class FailedTaskCounter:
def __init__(self, max_retries):
self.max_retries = max_retries
self.tasks: Dict[str, MaxCounter] = {}
def count_task(self, task) -> bool:
if task not in self.tasks:
self.tasks[task] = MaxCounter(self.max_retries)
return self.tasks[task].count_once(throw=False)
def reset_task(self, task):
if task in self.tasks:
self.tasks[task].reset()
class AzurLaneAutoScript(AzurLaneAutoScript):
@@ -608,6 +625,8 @@ class AzurLaneAutoScript(AzurLaneAutoScript):
self.is_fatal_error_restart = full_config.Restart_GameRestart_FatalErrorRestart
self.max_retry_times_for_same_task_failed = full_config.Restart_GameRestart_MaxRetryTimesForSameTaskFailed
self.failed_task_counter = FailedTaskCounter(self.max_retry_times_for_same_task_failed)
def pre_init(self):
from PIL import Image
Image.init()
@@ -932,10 +951,8 @@ class AzurLaneAutoScript(AzurLaneAutoScript):
self.is_first_task = False
# Check failures
failed = deep_get(self.failure_record, keys=task, default=0)
failed = 0 if success else failed + 1
deep_set(self.failure_record, keys=task, value=failed)
if failed >= self.max_retry_times_for_same_task_failed:
if not success:
if not self.failed_task_counter.count_task(task):
logger.critical(f"Task `{task}` failed {self.max_retry_times_for_same_task_failed} or more times.")
logger.critical("Possible reason #1: You haven't used it correctly. "
"Please read the help text of the options.")
@@ -950,6 +967,7 @@ class AzurLaneAutoScript(AzurLaneAutoScript):
exit(1)
if success:
self.failed_task_counter.reset_task(task)
del_cached_property(self, 'config')
continue
elif self.config.Error_HandleError: