停止运行改进
All checks were successful
ci/woodpecker/push/check_format Pipeline was successful

This commit is contained in:
zhbaor 2024-12-26 20:28:46 +08:00
parent 70d30c59b9
commit e02930a3b9
4 changed files with 32 additions and 31 deletions

View file

@ -1,5 +1,4 @@
from __future__ import annotations
import gc
from datetime import datetime, timedelta
from importlib import import_module
from typing import Any, Callable, Literal
@ -9,6 +8,8 @@ from mower.utils import typealias as tp
from mower.utils.csleep import csleep
from mower.utils.log import logger, save_screenshot
from .emulator import restart_emulator
method_map = {
"adb": "mower.utils.device.method.adb.ADB",
"droidcast": "mower.utils.device.method.droidcast.DroidCast",
@ -176,3 +177,16 @@ class Device:
"""
config.check_screen = self.app_control.check_device_screen()
return config.check_screen
def idle_solver(self, strategy=True):
if strategy:
if config.conf.strategy_when_idle == "close_emulator":
restart_emulator(start=False)
elif config.conf.strategy_when_idle == "exit_game" and config.device:
config.device.exit()
elif config.conf.strategy_when_idle == "switch_to_home":
config.device.home()
if config.conf.kill_server_when_idle:
for service in config.device.services.values():
service.kill_server()
gc.collect()

View file

@ -1,11 +1,8 @@
import functools
import gc
import networkx as nx
from mower.utils import config
from mower.utils.csleep import MowerExit
from mower.utils.device.emulator import restart_emulator
from mower.utils.log import logger
from mower.utils.scene import Scene, SceneComment
from mower.utils.solver import BaseSolver
@ -77,19 +74,6 @@ class SceneGraphSolver(BaseSolver):
logger.exception(f"场景转移异常:{e}")
self.sleep()
def idle_solver(self):
if config.conf.strategy_when_idle == "close_emulator":
restart_emulator(start=False)
elif config.conf.strategy_when_idle == "exit_game" and config.device:
config.device.exit()
elif config.conf.strategy_when_idle == "switch_to_home":
self.back_to_index()
config.device.home()
if config.conf.kill_server_when_idle:
for service in config.device.services.values():
service.kill_server()
gc.collect()
def back_to_index(self):
self.scene_graph_navigation(Scene.INDEX)

View file

@ -7,8 +7,8 @@ from importlib import import_module
from pydantic import BaseModel
from mower.static import clear_data
from mower.utils import config
from mower.utils.csleep import MowerExit, csleep
from mower.utils.graph import SceneGraphSolver
from mower.utils.log import logger
@ -133,7 +133,7 @@ class LongTask(BasicTask):
Task = OneTimeTask | PeriodicTask | DailyTask | LongTask
class Scheduler(SceneGraphSolver):
class Scheduler:
def __init__(self):
self.priority_queue: list[Task] = [] # 小于当前时间的待执行队列,按优先级排序
self.time_queue: list[Task] = [] # 大于当前时间的等待队列,按时间排序
@ -221,9 +221,11 @@ class Scheduler(SceneGraphSolver):
else:
# 如果没有需要立即执行的任务,休息
sleep_time = self.time_queue[0]._next_execution(now) - now
if sleep_time > timedelta(minutes=3):
self.idle_solver()
if sleep_time > timedelta(minutes=3) and config.device:
config.device.idle_solver()
csleep(sleep_time.total_seconds())
if config.recog:
config.recog.update()
except MowerExit:
logger.info("停止运行调度器")

View file

@ -1,4 +1,5 @@
#!/usr/bin/env python3
import gc
import json
import mimetypes
import os
@ -267,25 +268,25 @@ def start():
@app.route("/stop")
@get_require_token
def stop():
from mower.utils.graph.utils import SceneGraphSolver
global mower_thread
if mower_thread is None:
return "true"
if config.device.check_service_start() and config.recog:
SceneGraphSolver().idle_solver()
config.stop_mower.set()
mower_thread.join(10)
if mower_thread.is_alive():
logger.error("mower-ng线程仍在运行")
return "false"
else:
logger.info("成功停止mower-ng线程")
mower_thread = None
config.idle = True
return "true"
logger.info("成功停止mower-ng线程")
mower_thread = None
config.idle = True
if config.conf.kill_server_when_idle:
for service in config.device.services.values():
service.kill_server()
gc.collect()
return "true"
@app.route("/stop-maa")