实验队列

任务队列表格面板:维护实验任务的优先级排序、状态跟踪与生命周期管理(暂停/终止/休眠/删除)。

概述

ExperimentQquatm/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() 入队,因此桌面 界面与循环调度共用同一条“集中分配任务号”的入队通道。