【发布时间】:2021-04-16 09:53:03
【问题描述】:
我正在通过 SageMaker Notebook 中的 Python 单元触发 Step Function 执行,如下所示:
state_machine_arn = 'arn:aws:states:us-west-1:1234567891:stateMachine:alexanderMyPackageStateMachineE3411O13-A1vQWERTP9q9'
sfn = boto3.client('stepfunctions')
..
sfn.start_execution(**kwargs) # Non Blocking Call
run_arn = response['executionArn']
print(f"Started run {run_name}. ARN is {run_arn}.")
然后为了检查执行(可能需要几个小时才能完成,具体取决于输入)是否已完成,在我开始对结果进行一些自定义后期分析之前,我手动执行一个单元格:
response = sfn.list_executions(
stateMachineArn=state_machine_arn,
maxResults=1
)
print(response)
我可以从输出中看到执行状态,例如'status': 'RUNNING'.
我如何才能自动执行此操作,即仅在执行完成后触发 Step Function 并继续执行我的分析后自定义逻辑?例如,是否有一个阻塞调用来开始执行,或者我可以使用一个回调方法?
我可以考虑放一个 sleep 方法,这样 Python Notebook 单元会定期调用list_executions() 并检查状态,只有在执行完成时,才继续其余代码。我可以统计确定睡眠时间,但我想知道是否有更简单/更准确的方法。
PS:相关:How to avoid simultaneous execution in aws step function,但是我想避免创建任何新的 AWS 资源,为此,我想在 Notebook 中做所有事情。
PPS:我无法对 MyPackage 和 Step Function 定义进行任何更改。
【问题讨论】:
-
如果您不想创建任何新内容(例如 CloudWatch 事件规则、lambda 等),那么将
list_executions合并到一个循环中是您的解决方案。 -
@Marcin 你的意思是在一个带有睡眠方法的循环中,对吧?太棒了,非常感谢,因为这也是我的理解!
标签: python amazon-web-services asynchronous amazon-sagemaker aws-step-functions