AWS Lambda长时间运行http请求

时间:2017-05-07 05:12:01

标签: python amazon-web-services lambda aws-lambda algorithmia

我有一个AWS Lambda函数,它在Algorithmia上调用深度学习函数,对结果进行一些后处理,然后返回一些数据。 Algorithmia提供了我正在使用的python client,这使得在Algorithmia平台上向算法发送请求变得更容易。

问题如下:当一个Algorithmia函数没有被调用一段时间它被卸载时,第一次加热它(冷启动)需要一段时间,可能是30秒。如果我的Lambda函数等待30秒响应,只要碰巧从冷启动触发Algorithmia函数,这将非常昂贵和浪费。

是否有某种方法可以在Lambda中发送HTTP请求,当请求完成后,结果将通过管道传输到新的Lambda函数中,以便不需要Lambda函数等待整个时间并浪费资源?我不希望我不确定这实际上会如何起作用 - 是否有人有其他想法如何避免等待一段时间的回复并浪费Lambda资源?

编辑:在大多数情况下(显然算法算法算法需要一段时间从冷启动加载)延迟是一个问题,我不能通过这样做来增加延迟使用Algorithmia函数编写一些解决方法,将其写入S3(例如),然后触发Lambda函数。

2 个答案:

答案 0 :(得分:1)

许多输出文件的Algorithmia函数允许您指定输出位置(通常是输入JSON的output参数)。如果该假设适用于您的情况,那么您可以让Algorithmia函数直接写入S3存储桶并让S3触发单独的lambda函数。这个过程看起来像这样:

  • Add an S3 data source到您的Algorithmia帐户,并根据您的需要配置权限。

  • 调用算法时,将输出参数设置为使用该S3数据源,例如: "output": "s3://algorithm-name/sample-0001.png"

  • 配置Algorithmia的python客户端以忽略输出。这会导致请求立即返回,而不是等待函数完成:

from Algorithmia.algorithm import OutputType

client.algo("username/algoname")
    .set_options(output=OutputType.void)
    .pipe(input)

答案 1 :(得分:0)

你可以创建一个Lambda函数,只是为了调用Algorithmia API,只是为你的主要处理函数“保持温暖”。您可以使用Lambda预定事件。