Main loop of scheduler. :return:
(self)
| 397 | exit(1) |
| 398 | |
| 399 | def loop(self): |
| 400 | """ |
| 401 | Main loop of scheduler. |
| 402 | :return: |
| 403 | """ |
| 404 | logger.set_file_logger(self.config_name) |
| 405 | logger.info(f'Start scheduler loop: {self.config_name}') |
| 406 | |
| 407 | while 1: |
| 408 | # Check update event from GUI |
| 409 | # if self.stop_event is not None: |
| 410 | # if self.stop_event.is_set(): |
| 411 | # logger.info("Update event detected") |
| 412 | # logger.info(f"Alas [{self.config_name}] exited.") |
| 413 | # break |
| 414 | |
| 415 | # Check game server maintenance |
| 416 | # self.checker.wait_until_available() |
| 417 | # if self.checker.is_recovered(): |
| 418 | # # There is an accidental bug hard to reproduce |
| 419 | # # Sometimes, config won't be updated due to blocking |
| 420 | # # even though it has been changed |
| 421 | # # So update it once recovered |
| 422 | # del_cached_property(self, 'config') |
| 423 | # logger.info('Server or network is recovered. Restart game client') |
| 424 | # self.config.task_call('Restart') |
| 425 | |
| 426 | # Get task |
| 427 | task = self.get_next_task() |
| 428 | # 更新 gui的任务 |
| 429 | # Init device and change server |
| 430 | _ = self.device |
| 431 | # Skip first restart |
| 432 | if self.is_first_task and task == 'Restart': |
| 433 | logger.info('Skip task `Restart` at scheduler start') |
| 434 | self.config.task_delay(task='Restart', success=True, server=True) |
| 435 | del_cached_property(self, 'config') |
| 436 | continue |
| 437 | |
| 438 | # Run |
| 439 | logger.info(f'Scheduler: Start task `{task}`') |
| 440 | self.device.stuck_record_clear() |
| 441 | self.device.click_record_clear() |
| 442 | logger.hr(task, level=0) |
| 443 | success = self.run(inflection.camelize(task)) |
| 444 | logger.info(f'Scheduler: End task `{task}`') |
| 445 | self.is_first_task = False |
| 446 | |
| 447 | # Check failures |
| 448 | # failed = deep_get(self.failure_record, keys=task, default=0) |
| 449 | failed = self.failure_record[task] if task in self.failure_record else 0 |
| 450 | failed = 0 if success else failed + 1 |
| 451 | # deep_set(self.failure_record, keys=task, value=failed) |
| 452 | self.failure_record[task] = failed |
| 453 | if failed >= 3: |
| 454 | logger.critical(f"Task `{task}` failed 3 or more times.") |
| 455 | logger.critical("Possible reason #1: You haven't used it correctly. " |
| 456 | "Please read the help text of the options.") |
no test coverage detected