实验管理器
核心实验执行引擎:从实验队列取任务并按测量/序列/运行层级调度。
概述
quatm/GUI/experiment/experiment_manager.py 提供实验管理器(ExperimentManager
):从实验队列(ExperimentQueue)取出任务并执行的引擎。其队列轮询运行在
worker 线程,任务按 测量(measurement)→ 重复(repetition)→ 序列/扫描
(sequence)→ 单次运行(run) 的层级结构调度。
执行流程
queue_fn(worker 线程持续轮询队列)
└─→ run(任务包装:任何结束方式都保证收尾)
├─→ start_measurement(测量开始钩子)
├─→ start_sequence(序列/扫描开始钩子)
│ └─→ … 多次带变化参数的 run …
├─→ end_sequence(序列结束钩子)
└─→ end_measurement(测量结束钩子并清理任务表)
关键方法
| 方法 | 说明 |
|---|---|
queue_fn | 持续轮询队列任务字典:按优先级、任务号与预约时间挑选任务 |
run | 任务运行包装:无论 Done/Terminated/Failed/删除都正常收尾 |
pause | 暂停当前实验;再次调用恢复 |
terminate_experiment | 优雅终止:让当前这一次 run 自然跑完再停止 |
start_measurement 等 | 调用实验的 start/end 各阶段钩子 |
set_dict | 把单个参数写入实验对象实例属性 |
set_run_nr / set_rep_nr | 同步运行/重复序号到任务字典并刷新表格 |
due_check | 判断任务是否到预约执行时间 |
start_queue / shutdown | 启动 / 停止常驻队列 worker |
update_table | 通知 GUI 刷新任务表显示 |
用法
from quatm.GUI.experiment.experiment_manager import ExperimentManager
manager = ExperimentManager(browser) # browser 提供队列与界面
manager.start_queue() # 启动常驻队列 worker
任务在独立 worker 线程中执行,不阻塞 GUI;浏览器关闭时调用 shutdown 停止队列
worker 以便进程干净退出。