Files
project_main/subtask.py

137 lines
3.5 KiB
Python
Raw Normal View History

2024-05-21 23:53:47 +08:00
from enum import Enum
from loguru import logger
import time
# 任务类
class task:
2024-05-22 12:37:15 +08:00
def __init__(self, func_exec, func_find, enable=True):
2024-05-21 23:53:47 +08:00
self.enable = enable
2024-05-22 12:37:15 +08:00
self.func_exec = func_exec
self.func_find = func_find
def find(self):
# 检查该任执行标志
2024-05-21 23:53:47 +08:00
# TODO 完善该接口,是否需要单独为每种 task 编写一个函数,还是设置一个通用的过滤器(从 detection 模块过滤结果)
2024-05-22 12:37:15 +08:00
while self.func_find() is False:
pass
def exec(self):
2024-05-21 23:53:47 +08:00
# 根据标志位确定是否执行该任务
if self.enable is True:
2024-05-22 12:37:15 +08:00
logger.debug(f"[Task ]# Executing task")
self.func_exec()
logger.debug(f"[Task ]# Task completed")
2024-05-21 23:53:47 +08:00
else:
2024-05-22 12:37:15 +08:00
logger.warning(f"[Task ]# Skip task")
2024-05-21 23:53:47 +08:00
# 任务队列状态类
class task_queuem_status(Enum):
IDEL = 0
SEARCHING = 1
EXECUTING = 2
# 任务队列类 非EXECUTEING 时均执行 huigui注意互斥操作
class task_queuem(task):
# task_now = task(None, False)
def __init__(self, queue):
super(task_queuem, self)
self.queue = queue
self.status = task_queuem_status.IDEL
self.busy = True
2024-05-22 12:37:15 +08:00
logger.info(f"[TaskM]# Task num {self.queue.qsize()}")
2024-05-21 23:53:47 +08:00
def exec(self):
# 如果空闲状态则将下一个队列任务取出
if self.status is task_queuem_status.IDEL:
if self.queue.qsize() == 0:
self.busy = False
2024-05-22 12:37:15 +08:00
logger.info(f"[TaskM]# Task queue empty, exit")
2024-05-21 23:53:47 +08:00
return False
self.task_now = self.queue.get()
# 如果当前任务没有使能,则直接转入执行状态,由任务执行函数打印未执行信息
if self.task_now.enable is True:
self.status = task_queuem_status.SEARCHING
else:
self.status = task_queuem_status.EXECUTING
2024-05-22 12:37:15 +08:00
logger.info(f"[TaskM]# ---------------------->>>>")
2024-05-21 23:53:47 +08:00
# 阻塞搜索任务标志位
elif self.status is task_queuem_status.SEARCHING:
2024-05-22 12:37:15 +08:00
logger.info(f"[TaskM]# Start searching task target")
self.task_now.find()
2024-05-21 23:53:47 +08:00
self.status = task_queuem_status.EXECUTING
# 执行任务函数
elif self.status is task_queuem_status.EXECUTING:
2024-05-22 12:37:15 +08:00
logger.info(f"[TaskM]# Start execute task function")
self.task_now.exec() # 执行当前任务函数
2024-05-21 23:53:47 +08:00
self.queue.task_done() # 弹出已执行的任务
self.status = task_queuem_status.IDEL #
2024-05-22 12:37:15 +08:00
logger.info(f"[TaskM]# <<<<----------------------")
2024-05-21 23:53:47 +08:00
return True
# 人员施救
2024-05-22 12:37:15 +08:00
class get_block():
def find():
return True
def exec():
pass
2024-05-21 23:53:47 +08:00
# 紧急转移
2024-05-22 12:37:15 +08:00
class put_block():
def find():
return False
def exec():
pass
2024-05-21 23:53:47 +08:00
# 整装上阵
2024-05-22 12:37:15 +08:00
class get_bball():
def find():
return False
def exec():
pass
2024-05-21 23:53:47 +08:00
# 通信抢修
2024-05-22 12:37:15 +08:00
class up_tower():
def find():
return False
def exec():
pass
2024-05-21 23:53:47 +08:00
# 高空排险
2024-05-22 12:37:15 +08:00
class get_rball():
def find():
return False
def exec():
pass
2024-05-21 23:53:47 +08:00
# 派发物资
2024-05-22 12:37:15 +08:00
class put_bball():
def find():
return False
def exec():
pass
2024-05-21 23:53:47 +08:00
# 物资盘点
2024-05-22 12:37:15 +08:00
class put_hanoi():
def find():
return False
def exec():
pass
2024-05-21 23:53:47 +08:00
# 应急避险
2024-05-22 12:37:15 +08:00
class move_area():
def find():
return False
def exec():
pass
2024-05-21 23:53:47 +08:00
# 扫黑除暴
2024-05-22 12:37:15 +08:00
class kick_ass():
def find():
return False
def exec():
pass
2024-05-21 23:53:47 +08:00