Class: Pindo::TaskSystem::TaskExecutor
- Inherits:
-
Object
- Object
- Pindo::TaskSystem::TaskExecutor
- Defined in:
- lib/pindo/module/task/core/task_executor.rb
Overview
TaskExecutor - 任务执行器
职责:
-
执行单个任务
-
处理输出管理器模式和传统模式
-
管理任务回调和上下文
-
管理任务资源锁定和释放
Instance Method Summary collapse
-
#execute_task_sync(task, task_manager) ⇒ Object
执行单个任务.
-
#initialize(queue, reporter, resource_lock_manager, output_manager = nil) ⇒ TaskExecutor
constructor
A new instance of TaskExecutor.
-
#output_manager=(output_manager) ⇒ Object
设置输出管理器.
Constructor Details
#initialize(queue, reporter, resource_lock_manager, output_manager = nil) ⇒ TaskExecutor
Returns a new instance of TaskExecutor.
13 14 15 16 17 18 |
# File 'lib/pindo/module/task/core/task_executor.rb', line 13 def initialize(queue, reporter, resource_lock_manager, output_manager = nil) @queue = queue @reporter = reporter @resource_lock_manager = resource_lock_manager @output_manager = output_manager end |
Instance Method Details
#execute_task_sync(task, task_manager) ⇒ Object
执行单个任务
29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
# File 'lib/pindo/module/task/core/task_executor.rb', line 29 def execute_task_sync(task, task_manager) begin # 注入 TaskManager 实例(依赖注入) task.task_manager = task_manager # 设置任务进度回调 setup_task_callbacks(task) # 注意:资源锁已经在 ExecutionStrategy 的 find_and_remove 中原子获取 # 这里不需要再次获取,只需要在 ensure 中释放 # 根据是否有输出管理器选择执行模式 if @output_manager execute_task_with_output_manager(task) else execute_task_legacy(task) end # 将任务移到完成队列 @queue.mark_completed(task) ensure # 自动释放任务占用的资源 @resource_lock_manager.release(task.id) end end |
#output_manager=(output_manager) ⇒ Object
设置输出管理器
22 23 24 |
# File 'lib/pindo/module/task/core/task_executor.rb', line 22 def output_manager=(output_manager) @output_manager = output_manager end |