57 lines
2.0 KiB
Python
57 lines
2.0 KiB
Python
|
|
# =============================================
|
|||
|
|
# =============== 简单任务管理器 ===============
|
|||
|
|
# =============================================
|
|||
|
|
|
|||
|
|
|
|||
|
|
from PySide2.QtCore import QMutex
|
|||
|
|
from ..utils.thread_pool import threadRun # 异步执行函数
|
|||
|
|
|
|||
|
|
|
|||
|
|
class SimpleMission:
|
|||
|
|
def __init__(self, msnTask):
|
|||
|
|
self._msnTask = msnTask # 任务函数
|
|||
|
|
self._msnList = [] # 任务队列
|
|||
|
|
self._msnMutex = QMutex() # 任务队列的锁
|
|||
|
|
self._task = None # 异步任务对象
|
|||
|
|
self._taskMutex = QMutex() # 任务对象的锁
|
|||
|
|
|
|||
|
|
def addMissionList(self, msnList): # 添加一条任务队列,返回任务ID
|
|||
|
|
if len(msnList) < 1:
|
|||
|
|
return "[Error] len(msnList) < 1 !"
|
|||
|
|
# 添加到任务队列
|
|||
|
|
self._msnMutex.lock() # 上锁
|
|||
|
|
self._msnList += msnList
|
|||
|
|
self._msnMutex.unlock() # 解锁
|
|||
|
|
# 启动任务
|
|||
|
|
self._startMsns()
|
|||
|
|
return "[Success]"
|
|||
|
|
|
|||
|
|
def _startMsns(self): # 启动异步任务,执行所有任务列表
|
|||
|
|
# 若当前异步任务对象为空,则创建工作线程
|
|||
|
|
self._taskMutex.lock() # 上锁
|
|||
|
|
if self._task == None:
|
|||
|
|
self._task = threadRun(self._taskRun)
|
|||
|
|
self._taskMutex.unlock() # 解锁
|
|||
|
|
|
|||
|
|
# ========================= 【子线程 方法】 =========================
|
|||
|
|
|
|||
|
|
def _taskRun(self): # 异步执行任务字典的流程
|
|||
|
|
# 循环,直到任务队列的列表为空
|
|||
|
|
while True:
|
|||
|
|
self._msnMutex.lock() # 上锁
|
|||
|
|
dl = len(self._msnList) # 任务字典长度
|
|||
|
|
if dl == 0: # 任务队列已空
|
|||
|
|
self._msnMutex.unlock() # 解锁
|
|||
|
|
break
|
|||
|
|
msn = self._msnList.pop(0) # 取一个任务
|
|||
|
|
self._msnMutex.unlock() # 解锁
|
|||
|
|
if callable(self._msnTask):
|
|||
|
|
self._msnTask(msn)
|
|||
|
|
# 完成
|
|||
|
|
self._taskFinish()
|
|||
|
|
|
|||
|
|
def _taskFinish(self): # 任务结束
|
|||
|
|
self._taskMutex.lock() # 上锁
|
|||
|
|
self._task = None
|
|||
|
|
self._taskMutex.unlock() # 解锁
|