This commit is contained in:
parent
70d30c59b9
commit
e02930a3b9
4 changed files with 32 additions and 31 deletions
|
@ -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()
|
||||
|
|
|
@ -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)
|
||||
|
||||
|
|
|
@ -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("停止运行调度器")
|
||||
|
|
19
server.py
19
server.py
|
@ -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")
|
||||
|
|
Loading…
Add table
Reference in a new issue