Class: Pindo::TaskSystem::TaskExecutor

Inherits:
Object
  • Object
show all
Defined in:
lib/pindo/module/task/core/task_executor.rb

Overview

TaskExecutor - 任务执行器

职责:

  • 执行单个任务

  • 处理输出管理器模式和传统模式

  • 管理任务回调和上下文

  • 管理任务资源锁定和释放

Instance Method Summary collapse

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

执行单个任务

Parameters:

  • task (PindoTask)

    任务对象

  • task_manager (TaskManager)

    任务管理器(用于依赖注入)



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

设置输出管理器

Parameters:



22
23
24
# File 'lib/pindo/module/task/core/task_executor.rb', line 22

def output_manager=(output_manager)
  @output_manager = output_manager
end