实验队列
任务队列表格面板:维护实验任务的优先级排序、状态跟踪与生命周期管理(暂停/终止/休眠/删除)。
概述
ExperimentQ(quatm/GUI/experiment/experiment_queue.py)是 实验浏览器(Browser)
主窗口里的「实验队列」面板:一个由队列表格模型 ScheduleModel(模块
quatm/GUI/widgets/models.py)驱动的任务表格。任务字典以 任务号 为主键存放,
每个任务是一条含运行所需信息的记录;表格按优先级 priority(数值小者优先)→ 任务号排序。
任务状态
实验管理器(ExperimentManager) 与面板共同维护每个任务的状态:
| 状态 | 含义 |
|---|---|
Queued | 已入队、等待执行 |
Waiting | 设置了到期时间(due),未到期前暂不执行 |
Sleeping | 休眠中,管理器暂时忽略(可再次点击唤醒) |
Running | 正在执行单次运行 |
Scanning | 正在执行序列/扫描 |
Paused | 已暂停,可恢复继续 |
Terminating / Termination Pending | 正在优雅终止(允许当前运行跑完) |
Done | 执行完成 |
Failed | 执行失败 |
操作与快捷键
- 按钮栏(由
create_buttons创建):暂停/恢复、终止选中任务、终止全部等 图标按钮。 - 右键菜单与单键快捷键(
init_table_actions):e编辑参数、v只读预览、 删除、休眠/唤醒、暂停等。 - 删除正在运行的任务:自动转为优雅终止(
delete_clicked)。 - 终止(
terminate_clicked/terminate_all):优雅停止,让正在进行的运行 先跑完再结束。
主要方法
| 方法 | 功能 |
|---|---|
submit(taskDict) | 唯一的入队入口(运行在界面线程):集中分配任务号;循环器(Looper)也经 submitItem 信号走到这里 |
pause() | 暂停/恢复当前正在运行的实验 |
set_sleeping() | 把所选任务标记为休眠或唤醒 |
delete_item(k) / delete_clicked() | 按任务号删除,或删除所选行(正在运行则优雅终止) |
terminate_clicked() / terminate_all() | 优雅终止所选任务 / 全部任务 |
update_item(k, v) | 按任务号更新模型条目并复位锁 |
open_editor() / open_viewer() | 编辑 / 只读预览所选任务的参数(快捷键 e / v) |
数据模型
# 任务字典结构(主键 = 任务号)
expDict = {
1: {
"expName": "Rabi 扫描",
"filepath": "experiments/ion/rabi.py",
"status": "Queued",
"priority": 1,
"args": {},
"due": "",
},
}
排序规则:priority(数值小者优先)→ 任务号(先入先出)。
与循环器的关系
循环器(Looper) 的任务条目提交也统一经 ExperimentQ.submit() 入队,因此桌面
界面与循环调度共用同一条“集中分配任务号”的入队通道。