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

如何在AzureML Python SDK v2中异步提交流水线不阻塞终端?

避免AzureML SDK v2流水线提交阻塞终端的方案

方案1:移除日志流方法

阻塞终端的核心原因是ml_client.jobs.stream(job.name)会持续输出作业日志直到任务完成,直接移除该行代码即可让终端立即释放。提交后可记录作业ID,后续按需查询状态或日志。

修改后的代码:

from azure.ai.ml.dsl import pipeline

@pipeline
def my_pipeline():
    ...

pipeline_obj = my_pipeline()
# 提交作业并返回作业对象
job = ml_client.jobs.create_or_update(pipeline_obj)
# 输出作业信息便于后续追踪
print(f"流水线已提交,作业ID: {job.name},当前状态: {job.status}")

方案2:后台线程执行日志流(按需使用)

如果需要实时查看日志但不想阻塞主进程,可通过Python多线程将日志流操作放到后台执行,主进程可继续处理其他任务。

示例代码:

import threading
from azure.ai.ml.dsl import pipeline

@pipeline
def my_pipeline():
    ...

pipeline_obj = my_pipeline()
job = ml_client.jobs.create_or_update(pipeline_obj)
print(f"流水线已提交,作业ID: {job.name},当前状态: {job.status}")

# 定义日志流执行函数
def stream_job_logs(job_id):
    ml_client.jobs.stream(job_id)

# 启动后台线程运行日志流
log_thread = threading.Thread(target=stream_job_logs, args=(job.name,))
log_thread.start()

# 主进程可继续执行其他操作
print("主进程继续执行后续任务...")

方案3:定时查询作业状态

若无需实时日志,仅需追踪作业进度,可定时调用ml_client.jobs.get()查询状态,避免持续阻塞。

示例代码:

import time
from azure.ai.ml.dsl import pipeline

@pipeline
def my_pipeline():
    ...

pipeline_obj = my_pipeline()
job = ml_client.jobs.create_or_update(pipeline_obj)
job_id = job.name
print(f"流水线已提交,作业ID: {job_id}")

# 定时查询作业状态(可调整查询间隔)
while True:
    current_job = ml_client.jobs.get(job_id)
    print(f"当前作业状态: {current_job.status}")
    # 作业进入终态时停止查询
    if current_job.status in ["Completed", "Failed", "Canceled"]:
        print(f"作业结束,最终状态: {current_job.status}")
        break
    time.sleep(30)  # 每30秒查询一次

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 10:25:05