Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用water.wait时AWS Lambda作业运行两次_Python_Amazon Web Services_Lambda_Amazon Elastic Transcoder - Fatal编程技术网

Python 使用water.wait时AWS Lambda作业运行两次

Python 使用water.wait时AWS Lambda作业运行两次,python,amazon-web-services,lambda,amazon-elastic-transcoder,Python,Amazon Web Services,Lambda,Amazon Elastic Transcoder,我正在使用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

我正在使用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',
      }]
  )
然而,我想做的是在转码完成后删除原始文件

(推荐人)

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

job_id = job['Job']['Id']
waiter = transcoder.get_waiter('job_complete')
waiter.wait(Id=job_id)
然后我的工作被重新提交?基本上相同的作业在弹性转码器中重新出现,但由于输出文件已经存在而失败。云监视日志显示作业作为同一lambda执行的一部分再次运行

如何使用water.wait方法让我知道作业何时完成,而不重新提交


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

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