如何使用AzureML Python SDK v2更新现有调度作业的代码
使用AzureML Python SDK v2更新调度作业的代码文件夹(保留原有设置)
要实现只更新调度关联作业的代码文件夹、完整保留原有调度配置(比如每日执行时间),可以通过提取原有调度的全部配置,仅修改作业的代码路径,再重新创建/覆盖原有调度的方式完成,核心是复用所有未改动的属性。
操作步骤
1. 导入依赖并连接工作区
from azure.ai.ml import MLClient from azure.ai.ml.entities import JobSchedule from azure.identity import DefaultAzureCredential # 初始化MLClient连接到目标工作区 ml_client = MLClient( credential=DefaultAzureCredential(), subscription_id="你的订阅ID", resource_group_name="你的资源组名称", workspace_name="你的工作区名称" )
2. 获取目标调度对象
# 替换为你要更新的调度名称 target_schedule_name = "daily_data_sync_schedule" existing_schedule = ml_client.schedules.get(name=target_schedule_name)
3. 更新作业的代码文件夹路径
从现有调度中提取关联的作业定义,仅修改code字段指向新的代码目录(支持本地路径或AzureML数据存储路径):
# 提取原有作业配置(所有参数、环境、命令等设置自动保留) updated_job = existing_schedule.create_job # 场景1:本地代码文件夹(执行脚本时会自动上传至工作区) updated_job.code = "./new_sync_code" # 场景2:AzureML数据存储中的代码路径(适合大体积或共享代码) # updated_job.code = "azureml://datastores/workspaceblobstore/paths/prod_sync_code_v2"
4. 重新创建调度(覆盖原有)
用更新后的作业定义,复用原有调度的所有触发规则和属性,执行更新:
# 构建新调度对象,完全保留原有调度配置,仅替换关联作业 updated_schedule = JobSchedule( name=target_schedule_name, create_job=updated_job, trigger=existing_schedule.trigger, # 保留原有触发规则(每日执行时间、频率等) display_name=existing_schedule.display_name, description=existing_schedule.description, tags=existing_schedule.tags ) # 提交更新操作 ml_client.schedules.begin_create_or_update(updated_schedule).result()
5. 验证更新结果
# 重新获取调度,确认代码路径已更新 final_schedule = ml_client.schedules.get(name=target_schedule_name) print(f"调度代码路径已更新为:{final_schedule.create_job.code}")
注意事项
- 确保新代码文件夹的结构与原有一致,尤其是作业指定的入口脚本路径(比如原有作业用
script: main.py,新文件夹里也要有对应的main.py) - 如果需要调整作业的其他配置(比如环境、参数),可直接在
updated_job对象上修改,不会影响调度的触发规则 begin_create_or_update方法会安全覆盖原有调度,所有未修改的属性(包括触发时间、重试策略等)都会完整保留
内容的提问来源于stack exchange,提问作者Jau A
相关产品推荐
相关产品推荐

