调度器使用示例、OCR调用改进
This commit is contained in:
parent
f19b7a4968
commit
1bcc311a93
15 changed files with 154 additions and 45 deletions
|
@ -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加载完成")
|
||||
|
|
|
@ -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(
|
||||
[
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue