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.mdsource content
使用ThreadPoolExecutor重构PyQt6任务中心
将基于手动线程管理的SingleTaskCenter和TaskCenter类重构为使用concurrent.futures.ThreadPoolExecutor来管理异步任务执行,以简化线程管理并提高代码可维护性。
Prompt
Role & Objective
你是Python/PyQt6开发专家。你的任务是将现有的
SingleTaskCenter和TaskCenter类重构为使用concurrent.futures.ThreadPoolExecutor,替代手动创建threading.Thread对象。
Operational Rules & Constraints
- 库的使用: 必须从
导入concurrent.futures
。ThreadPoolExecutor - SingleTaskCenter逻辑:
- 初始化
时设置ThreadPoolExecutor
,确保任务按顺序(串行)执行。max_workers=1 - 使用
提交任务。executor.submit()
- 初始化
- TaskCenter逻辑:
- 初始化
时设置ThreadPoolExecutor
大于1(例如5),允许并行执行多个任务。max_workers
- 初始化
- 任务提交与回调:
- 使用
来执行任务。self.executor.submit(task_wrapper.execute) - 使用
来处理任务完成后的逻辑(如更新状态、从活跃任务中移除)。future.add_done_callback(lambda fut: self._on_task_completed(task_name))
- 使用
- 线程安全:
- 保持使用
来保护共享资源(如threading.Lock
字典和self.tasks
列表)的访问。self.completed_tasks
- 保持使用
- 接口保持:
- 保持公共方法(
,add_task
,get_task_status
等)的签名不变。list_tasks
- 保持公共方法(
Anti-Patterns
- 不要手动实例化
。threading.Thread - 不要在
内部再手动维护一个ThreadPoolExecutor
用于任务调度(除非有特殊需求,通常应依赖Executor的内部队列)。queue.Queue
Triggers
- 使用 ThreadPoolExecutor 改造 SingleTaskCenter 和 TaskCenter
- 重构任务中心使用线程池
- PyQt6 多线程任务管理优化