调度器使用示例、OCR调用改进

This commit is contained in:
zhbaor 2024-11-03 15:32:35 +08:00
parent f19b7a4968
commit 1bcc311a93
15 changed files with 154 additions and 45 deletions

View file

@ -1,9 +1,7 @@
engine = None
from rapidocr_onnxruntime import RapidOCR
from mower.utils.log import logger
def initialize_ocr(score=0.3):
global engine
if not engine:
from rapidocr_onnxruntime import RapidOCR
engine = RapidOCR(text_score=score)
logger.info("加载OCR")
engine = RapidOCR(text_score=0.3)
logger.info("OCR加载完成")

View file

@ -1,5 +1,5 @@
from datetime import datetime, time, timedelta
from typing import Any
from importlib import import_module
from pydantic import BaseModel
@ -9,10 +9,18 @@ from mower.utils.log import logger
from mower.utils.simulator import restart_simulator
def import_solver(full_name: str):
index = full_name.rfind(".")
module_name = full_name[:index]
class_name = full_name[index + 1 :]
module = import_module(module_name)
return getattr(module, class_name)
class BasicTask(BaseModel):
"内部使用"
solver: Any
solver: str
"调用solver().run()"
priority: int = 10
@ -23,9 +31,10 @@ class BasicTask(BaseModel):
@property
def _solver_name(self):
if self.solver.solver_name is None:
return self.solver.__qualname__
return self.solver.solver_name
solver_class = import_solver(self.solver)
if solver_class.solver_name is None:
return solver_class.__qualname__
return solver_class.solver_name
def _get_next_execution(self, now: datetime):
return now
@ -109,6 +118,18 @@ class Scheduler:
logger.info(f"注册任务:{task}")
self.task_list.append(task)
def register_one_time(self, solver: str, time: datetime, priority: int = 10):
self.register(OneTimeTask(solver=solver, time=time, priority=priority))
def register_periodic(self, solver: str, interval: timedelta, priority: int = 20):
self.register(PeriodicTask(solver=solver, interval=interval, priority=priority))
def register_daily(self, solver: str, offset: timedelta, priority: int = 30):
self.register(DailyTask(solver=solver, time_offset=offset, priority=priority))
def register_long(self, solver: str, priority: int = 40):
self.register(LongTask(solver=solver, priority=priority))
def list_tasks(self):
for i, task in enumerate(self.task_list):
logger.info(f"({i + 1}/{len(self.task_list)}) {task}")
@ -135,7 +156,7 @@ class Scheduler:
[task for _time, task in execution_list if _time <= now],
key=lambda task: task.priority,
)
solver = next_task.solver()
solver = import_solver(next_task.solver)()
try:
stop_time = min(
[