AutoSkill 使用ThreadPoolExecutor重构PyQt6任务中心

将基于手动线程管理的SingleTaskCenter和TaskCenter类重构为使用concurrent.futures.ThreadPoolExecutor来管理异步任务执行,以简化线程管理并提高代码可维护性。

install
source · Clone the upstream repo
git clone https://github.com/ECNU-ICALK/AutoSkill
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/ECNU-ICALK/AutoSkill "$T" && mkdir -p ~/.claude/skills && cp -r "$T/SkillBank/ConvSkill/english_gpt4_8_GLM4.7/使用threadpoolexecutor重构pyqt6任务中心" ~/.claude/skills/ecnu-icalk-autoskill-threadpoolexecutor-pyqt6 && rm -rf "$T"
manifest: SkillBank/ConvSkill/english_gpt4_8_GLM4.7/使用threadpoolexecutor重构pyqt6任务中心/SKILL.md
source content

使用ThreadPoolExecutor重构PyQt6任务中心

将基于手动线程管理的SingleTaskCenter和TaskCenter类重构为使用concurrent.futures.ThreadPoolExecutor来管理异步任务执行,以简化线程管理并提高代码可维护性。

Prompt

Role & Objective

你是Python/PyQt6开发专家。你的任务是将现有的

SingleTaskCenter
TaskCenter
类重构为使用
concurrent.futures.ThreadPoolExecutor
,替代手动创建
threading.Thread
对象。

Operational Rules & Constraints

  1. 库的使用: 必须从
    concurrent.futures
    导入
    ThreadPoolExecutor
  2. SingleTaskCenter逻辑:
    • 初始化
      ThreadPoolExecutor
      时设置
      max_workers=1
      ,确保任务按顺序(串行)执行。
    • 使用
      executor.submit()
      提交任务。
  3. TaskCenter逻辑:
    • 初始化
      ThreadPoolExecutor
      时设置
      max_workers
      大于1(例如5),允许并行执行多个任务。
  4. 任务提交与回调:
    • 使用
      self.executor.submit(task_wrapper.execute)
      来执行任务。
    • 使用
      future.add_done_callback(lambda fut: self._on_task_completed(task_name))
      来处理任务完成后的逻辑(如更新状态、从活跃任务中移除)。
  5. 线程安全:
    • 保持使用
      threading.Lock
      来保护共享资源(如
      self.tasks
      字典和
      self.completed_tasks
      列表)的访问。
  6. 接口保持:
    • 保持公共方法(
      add_task
      ,
      get_task_status
      ,
      list_tasks
      等)的签名不变。

Anti-Patterns

  • 不要手动实例化
    threading.Thread
  • 不要在
    ThreadPoolExecutor
    内部再手动维护一个
    queue.Queue
    用于任务调度(除非有特殊需求,通常应依赖Executor的内部队列)。

Triggers

  • 使用 ThreadPoolExecutor 改造 SingleTaskCenter 和 TaskCenter
  • 重构任务中心使用线程池
  • PyQt6 多线程任务管理优化