-
-
Notifications
You must be signed in to change notification settings - Fork 0
15 task manager
Zuko edited this page Jan 24, 2026
·
2 revisions
Central API for task management, scheduling, và monitoring
TaskManagerService cung cấp unified API cho:
- Task execution
- Scheduling (date, interval, cron)
- Task chains
- Status monitoring
- Persistence
from core import QtAppContext
ctx = QtAppContext.globalInstance()
taskManager = ctx.taskManagertaskManager.addTask(task, scheduleInfo=None)chain = taskManager.addChainTask(
name='Chain Name',
tasks=[task1, task2],
retryBehaviorMap={...}
)taskManager.cancelTask(uuid)# Stop all tasks targeted by tag
taskManager.stopTasksByTag('Network')
# Include chained children (danger zone)
taskManager.stopTasksByTag('Network', includeChainedChildren=True)
# Pause all tasks targeted by tag
taskManager.pauseTasksByTag('HeavyComputation')status = taskManager.getTaskStatus(uuid)
allTasks = taskManager.getAllTasks()
failedTasks = taskManager.getFailedTasks()taskManager.setMaxConcurrentTasks(5)
queueStatus = taskManager.getQueueStatus()from datetime import datetime, timedelta
taskManager.addTask(task, scheduleInfo={
'trigger': 'date',
'runDate': datetime.now() + timedelta(hours=1)
})taskManager.addTask(task, scheduleInfo={
'trigger': 'interval',
'intervalSeconds': 60 # Every minute
})taskManager.addTask(task, scheduleInfo={
'trigger': 'cron',
'hour': 9,
'minute': 0,
'day_of_week': 'mon-fri'
})taskManager.taskAdded.connect(lambda uuid: print(f'Added: {uuid}'))
taskManager.taskRemoved.connect(lambda uuid: print(f'Removed: {uuid}'))
taskManager.statusChanged.connect(lambda uuid, status: print(f'{uuid}: {status}'))
taskManager.progressUpdated.connect(lambda uuid, progress: print(f'{uuid}: {progress}%'))from core import QtAppContext
from core.taskSystem import AbstractTask
class MyTask(AbstractTask):
def handle(self):
# Task logic...
pass
def _performCancellationCleanup(self):
pass
ctx = QtAppContext.globalInstance()
taskManager = ctx.taskManager
task = MyTask(name='My Task')
taskManager.addTask(task)from datetime import datetime, timedelta
# Run in 1 hour
task = MyTask(name='Scheduled Task')
taskManager.addTask(task, scheduleInfo={
'trigger': 'date',
'runDate': datetime.now() + timedelta(hours=1)
})
# Run every 5 minutes
task = MyTask(name='Periodic Task')
taskManager.addTask(task, scheduleInfo={
'trigger': 'interval',
'intervalSeconds': 300
})chain = taskManager.addChainTask(
name='Data Pipeline',
tasks=[
FetchTask(name='Fetch'),
ProcessTask(name='Process'),
SaveTask(name='Save')
],
retryBehaviorMap={
'Fetch': ChainRetryBehavior.RETRY_TASK,
'Process': ChainRetryBehavior.SKIP_TASK,
'Save': ChainRetryBehavior.FAIL_CHAIN
}
)# Monitor all tasks
def onStatusChanged(uuid, status):
print(f'Task {uuid}: {status}')
def onProgress(uuid, progress):
print(f'Task {uuid}: {progress}%')
taskManager.statusChanged.connect(onStatusChanged)
taskManager.progressUpdated.connect(onProgress)
# Get queue status
status = taskManager.getQueueStatus()
print(f'Active: {status["active"]}, Pending: {status["pending"]}')# Add task
task = MyTask(name='Cancellable Task')
taskManager.addTask(task)
# Cancel later
taskManager.cancelTask(task.uuid)# Check if tasks enabled
ctx = QtAppContext.globalInstance()
if ctx.isFeatureEnabled('tasks'):
taskManager = ctx.taskManager
# Monitor task status
taskManager.statusChanged.connect(onStatusChanged)
# Set appropriate max concurrent
taskManager.setMaxConcurrentTasks(3)
# Use descriptive names
task = MyTask(name='Download User Data')# Don't assume tasks enabled
taskManager = ctx.taskManager # May be None!
# Don't create too many concurrent tasks
taskManager.setMaxConcurrentTasks(100) # Too many!
# Don't forget to handle failures
# Monitor failedTasks and handle appropriately- AbstractTask - Task implementation
- TaskChain - Task chaining
- Task System Overview - Architecture