Python 如何以编程方式告知AWS Step函数执行已完成?

Python 如何以编程方式告知AWS Step函数执行已完成?,python,amazon-web-services,asynchronous,amazon-sagemaker,aws-step-functions,Python,Amazon Web Services,Asynchronous,Amazon Sagemaker,Aws Step Functions,我通过SageMaker笔记本中的Python单元触发步骤函数执行,如下所示: state_machine_arn = 'arn:aws:states:us-west-1:1234567891:stateMachine:alexanderMyPackageStateMachineE3411O13-A1vQWERTP9q9' sfn = boto3.client('stepfunctions') .. sfn.start_execution(**kwargs) # Non Blocking Ca

我通过SageMaker笔记本中的Python单元触发步骤函数执行,如下所示:

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)
我可以从输出中看到执行的状态,例如,
“状态”:“正在运行”

如何实现自动化,即触发Step函数并仅在执行完成后继续执行分析后自定义逻辑?例如,是否有一个阻止调用来启动执行,或者我可以使用一个回调方法

我可以考虑放置一个sleep方法,这样Python笔记本单元将定期调用
list\u executions()
并检查状态,并且只有在执行完成后,才继续执行其余代码。我可以从统计学上确定睡眠时间,但我想知道是否有更简单/更准确的方法


PS:Related:,但是我希望避免创建任何新的AWS资源,就为了这个,我希望从笔记本中做所有事情

PPS:我无法根据注释对
MyPackage
和步骤函数定义进行任何更改。

如果不创建新资源(不允许创建CloudWatch事件规则、lambda函数)也不允许对现有步骤函数进行任何更改,则迭代池将是最佳解决方案


AWS CLI和boto3实现了类似的解决方案(不是针对Step功能),而是针对一些其他服务。他们被称为服务员(例如)。因此,基本上您必须为Step函数创建自己的侍者,因为AWS不提供这样的侍者。AWS使用我记忆中的等待者睡眠时间15秒。

如果你不想创建任何新的东西(例如CloudWatch事件规则、lambda等),那么将
列表执行
集中在一个循环中就是你的解决方案。@Marcin你是说在一个有睡眠方法的循环中,对吗?太棒了,非常感谢你,因为这也是我的理解!