gpt4 book ai didi

python - 使用 waiter.wait 时 AWS Lambda 作业运行两次

转载 作者:太空宇宙 更新时间:2023-11-04 05:10:28 29 4
gpt4 key购买 nike

我正在使用 lambda 函数来运行 AWS 弹性转码器。

如果我执行以下操作,该函数工作正常:

def lambda_handler(event, context):

transcoder = boto3.client('elastictranscoder', REGION_NAME)
pipeline_id = get_pipeline(transcoder, PIPELINE)

input_file = os.path.basename(event['Records'][0]['s3']['object']['key'])
filename_without_extension = os.path.splitext(input_file)[0]

job = transcoder.create_job(
PipelineId=pipeline_id,
Input={
'Key': 'uploads/' + input_file,
'FrameRate': 'auto',
'Resolution': 'auto',
'AspectRatio': 'auto',
'Interlaced': 'auto',
'Container' : 'auto'
},
Outputs=[{
'Key': filename_without_extension + '.mp4',
'PresetId': '1487545782241-6uy45r',
}]
)

然而,我想做的是在转码完成后删除原始文件。

(由 Deleting a file after transcoding with AWS Lambda and Elastic Transcoder 推荐)

我正在尝试使用 waiter.wait() 函数,但如果我将以下内容添加到我的代码末尾:

job_id = job['Job']['Id']
waiter = transcoder.get_waiter('job_complete')
waiter.wait(Id=job_id)

然后我的工作被重新提交?基本上相同的作业会重新出现在 Elastic Transcoder 中,但由于输出文件已经存在而失败。云监视日志显示作业作为同一 lambda 执行的一部分再次运行。

如何使用 waiter.wait 方法让我知道作业何时完成,而无需重新提交?

最佳答案

您需要在管道设置下订阅完成通知。该通知必须启动一个新的 lambda 函数来处理您的自定义逻辑。

enter image description here

您看到相同的作业再次提交的原因是,如果 lambda 函数执行失败(通过调用完成 block 并出现错误、超时等),lambda 将在之后自动重试具有相同事件的函数两次退避期。

关于python - 使用 waiter.wait 时 AWS Lambda 作业运行两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43129826/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com