You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何根据输入值让Python实验从指定任务起点重启运行?

实验程序重启功能实现方案

需求说明

开发Python实验程序时,需要支持中途退出后从指定任务重启:调用run时传入restart=True,弹出对话框让用户输入任务名称,程序跳过前置任务,直接从该任务开始执行后续所有任务。现有代码已实现重启点输入逻辑,需完善run函数的任务执行逻辑。

实现思路

把所有任务按执行顺序整理成任务列表,每个元素包含任务名称和对应的执行逻辑。这样可以根据用户输入的重启点,快速定位到任务在列表中的位置,然后从该位置开始依次执行后续任务。

修改后的完整代码

def __init__(self, portname, restart=False):
    self.__port_name = portname
    self.__path = '/Users/emilia/Documents/Dementia task piloting/Lumo'
    self.__restart = restart
    # 定义任务顺序列表:(任务名称, 执行逻辑)
    self.__task_sequence = [
        ("auditory_staircase", lambda: self.__auditory_staircase(5)),
        ("object_recognition", lambda: self.__object_recognition()),
        ("resting_state", lambda: self.__resting_state()),
        ("simple_motor_task", lambda: self.__simple_motor_task()),
        ("naturalistic_motor_task", lambda: self.__naturalistic_motor_task()),
        ("end_all_experiment", lambda: self.__end_all_experiment())
    ]

def __restart(self):
    if self.__restart:
        restart_point = {'Task to restart from': ''}
        dlg = gui.DlgFromDict(dictionary=restart_point, sortKeys=False, title='Where do you want to restart from?')
        if not dlg.OK:
            print("User pressed 'Cancel'!")
            core.quit()
        return restart_point['Task to restart from']
    else:
        return None

def run(self):
    start_point = self.__restart()
    
    if start_point:
        # 查找重启任务的索引
        start_idx = None
        for idx, (task_name, _) in enumerate(self.__task_sequence):
            if task_name == start_point:
                start_idx = idx
                break
        # 处理无效任务名称的情况
        if start_idx is None:
            print(f"Error: 任务'{start_point}'不存在")
            core.quit()
        # 从重启点开始执行后续任务
        for task_name, task_func in self.__task_sequence[start_idx:]:
            print(f"开始执行任务: {task_name}")
            task_func()
    else:
        # 正常顺序执行所有任务
        for task_name, task_func in self.__task_sequence:
            print(f"开始执行任务: {task_name}")
            task_func()

关键说明

  • 任务列表设计:用lambda表达式包装带参数的任务(比如__auditory_staircase(5)),确保调用时能正确传递参数。
  • 重启点定位:遍历任务列表匹配用户输入的任务名称,找到对应的起始索引。
  • 异常处理:如果用户输入的任务名称不存在,打印错误信息并退出程序。
  • 统一执行逻辑:无论是否重启,都复用同一任务列表执行,避免代码冗余。

内容的提问来源于stack exchange,提问作者sallicap

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 21:20:28