任务服务
任务服务是JitTask框架的核心API服务,负责任务模板管理、任务创建执行、状态控制和强制终止等功能。元素分层结构为Meta(services.Meta) → Type(services.NormalType) → 实例(services.TaskSvc),开发者可直接使用TaskSvc实例元素。
当然,开发者也可以创建自己的Type元素,或者在自己的App中改写JitAi官方提供的services.NormalType元素,以实现自己的封装。
快速开始
任务服务作为JitTask框架的内置实例元素,可直接通过app.getElement()
获取使用:
基础使用示例
# 获取任务服务实例
taskSvc = app.getElement("services.TaskSvc")
# 获取任务模板列表
templates = taskSvc.getTaskTmplList("")
# 创建定时任务
result = taskSvc.createTimerTask(
fullName="tasks.MyTask",
startTime="2024-01-01 10:00:00",
funcName="executeTask",
taskType="tasks.NormalType",
argDict={"param1": "value1"}
)
方法
getTaskTmplList
获取系统中所有可用的任务模板列表,支持按名称筛选。
参数详解
参数名 | 类型 | 对应原生类型 | 必填 | 说明 |
---|---|---|---|---|
queryStr | Stext | str | 是 | 模板名称筛选条件,空字符串返回所有模板 |
返回值
JitList类型,包含任务模板信息列表,每个项目包含title、taskType、repeatType、fullName字段。
使用示例
获取任务模板列表
taskSvc = app.getElement("services.TaskSvc")
# 获取所有任务模板
all_templates = taskSvc.getTaskTmplList("")
# 按名称筛选任务模板
filtered_templates = taskSvc.getTaskTmplList("数据备份")
# 处理返回结果
for template in all_templates:
print(f"模板名称: {template['title']}")
print(f"任务类型: {template['taskType']}")
print(f"重复类型: {template['repeatType']}")
print(f"完整路径: {template['fullName']}")
createTimerTask
创建一个定时任务,支持指定执行时间、函数路径和参数。
参数详解
参数名 | 类型 | 对应原生类型 | 必填 | 说明 |
---|---|---|---|---|
fullName | Stext | str | 是 | 任务元素的完整路径 |
startTime | Datetime | datetime | 是 | 任务开始执行时间 |
funcName | Stext | str | 是 | 要执行的函数路径 |
taskType | Stext | str | 是 | 任务类型,如tasks.NormalType |
argDict | JitDict | dict | 是 | 传递给执行函数的参数字典 |
返回值
JitDict类型,包含任务创建结果信息。
使用示例
创建定时任务
from datetime import datetime, timedelta
taskSvc = app.getElement("services.TaskSvc")
# 创建1小时后执行的任务
future_time = datetime.now() + timedelta(hours=1)
result = taskSvc.createTimerTask(
fullName="tasks.DataBackup",
startTime=future_time.strftime("%Y-%m-%d %H:%M:%S"),
funcName="services.BackupSvc.backupDatabase",
taskType="tasks.NormalType",
argDict={
"database": "main_db",
"backup_path": "/backup/",
"compress": True
}
)
print(f"任务创建结果: {result}")
forcedEnd
手动强制结束指定的任务,会更新任务状态并触发后续处理。
参数详解
参数名 | 类型 | 对应原生类型 | 必填 | 说明 |
---|---|---|---|---|
taskId | Stext | str | 是 | 要结束的任务ID |
返回值
JitDict类型,操作结果信息。
使用示例
强制结束任务
taskSvc = app.getElement("services.TaskSvc")
# 强制结束指定任务
result = taskSvc.forcedEnd("task_uuid_12345")
print(f"任务强制结束结果: {result}")
saveDateFieldTask
处理基于日期字段的任务保存回调,当模型数据的日期字段发生变化时自动触发任务调度。
参数详解
参数名 | 类型 | 对应原生类型 | 必填 | 说明 |
---|---|---|---|---|
rowObj | RowData | dict | 是 | 包含数据变更信息的行对象 |
返回值
JitDict类型,处理结果信息。
使用示例
日期字段任务保存回调
# 通常在模型事件中使用
def onModelUpdate(rowObj):
taskSvc = app.getElement("services.TaskSvc")
# 处理日期字段任务
result = taskSvc.saveDateFieldTask(rowObj)
return result
deleteDateFieldTask
处理基于日期字段的任务删除回调,当关联的模型数据被删除时清理相关任务。
参数详解
参数名 | 类型 | 对应原生类型 | 必填 | 说明 |
---|---|---|---|---|
rowObj | RowData | dict | 是 | 包含被删除数据信息的行对象 |
返回值
JitDict类型,处理结果信息。
使用示例
日期字段任务删除回调
# 通常在模型事件中使用
def onModelDelete(rowObj):
taskSvc = app.getElement("services.TaskSvc")
# 清理相关任务
result = taskSvc.deleteDateFieldTask(rowObj)
return result
属性
任务服务继承自services.NormalType,暂无特有的公开属性。
高级特性
任务生命周期管理
任务服务支持完整的任务生命周期管理,包括创建、执行、监控和终止:
任务生命周期管理
taskSvc = app.getElement("services.TaskSvc")
# 1. 获取可用模板
templates = taskSvc.getTaskTmplList("")
# 2. 基于模板创建任务
if templates:
template = templates[0]
result = taskSvc.createTimerTask(
fullName=template['fullName'],
startTime="2024-12-01 09:00:00",
funcName="services.BusinessSvc.processData",
taskType=template['taskType'],
argDict={"batch_size": 100}
)
# 3. 如需要可强制终止任务
# taskSvc.forcedEnd("task_id")
模型事件集成
任务服务与模型事件深度集成,支持数据变更驱动的任务调度:
模型事件集成
# 在模型的生命周期函数中使用
def afterSave(self, triggerEvent=1):
"""模型保存后触发任务服务"""
taskSvc = app.getElement("services.TaskSvc")
# 构造行对象
rowObj = {
'postData': self, # 更新后的数据
'prevData': self._original_data # 更新前的数据(需要自行维护)
}
# 触发日期字段任务处理
taskSvc.saveDateFieldTask(rowObj)
def afterDelete(self, triggerEvent=1):
"""模型删除后清理相关任务"""
taskSvc = app.getElement("services.TaskSvc")
rowObj = {
'prevData': self # 被删除的数据
}
# 清理相关任务
taskSvc.deleteDateFieldTask(rowObj)
批量任务管理
支持批量创建和管理多个关联任务:
批量任务管理
taskSvc = app.getElement("services.TaskSvc")
# 批量创建一组相关任务
task_configs = [
{
"fullName": "tasks.DataSync",
"startTime": "2024-12-01 01:00:00",
"funcName": "services.SyncSvc.syncUserData",
"taskType": "tasks.NormalType",
"argDict": {"table": "users"}
},
{
"fullName": "tasks.DataSync",
"startTime": "2024-12-01 02:00:00",
"funcName": "services.SyncSvc.syncOrderData",
"taskType": "tasks.NormalType",
"argDict": {"table": "orders"}
}
]
# 批量创建任务
results = []
for config in task_configs:
result = taskSvc.createTimerTask(**config)
results.append(result)
print(f"批量创建了 {len(results)} 个任务")