我有一个 AWS Lambda 函数,它在 Algorithmia 上调用深度学习函数,对结果进行一些后处理,然后返回一些数据。 Algorithmia 提供了一个 python client我正在使用它只是让向 Algorithmia 平台上的算法发送请求变得更容易一些。
问题如下:当一个 Algorithmia 函数有一段时间没有被调用时,它被卸载并且第一次调用来预热它(冷启动)需要一段时间,可能需要 30 秒。如果我的 Lambda 函数在冷启动时恰好触发 Algorithmia 函数时要等待 30 秒的响应,那将是非常昂贵和浪费的。
有没有什么方法可以在 Lambda 中发送 HTTP 请求,并在请求完成后将结果通过管道传输到新的 Lambda 函数中,从而不需要 Lambda 函数一直等待并浪费资源?我预计不会,因为我不确定这将如何实际工作 - 关于如何避免等待响应和浪费 Lambda 资源,是否有人有其他想法?
编辑:在大多数情况下(显然 Algorithmia 算法需要一段时间才能从冷启动加载的情况除外)延迟是一个问题,我无法通过采取一些解决方法来增加延迟方法与 Algorithmia 函数写入它对 S3 的响应(例如),然后触发 Lambda 函数。
最佳答案
许多输出文件的 Algorithmia 函数允许您指定输出位置(通常是输入 JSON 的 output
参数)。如果该假设适用于您的情况,那么您可以让 Algorithmia 函数直接写入 S3 存储桶并让 S3 触发单独的 lambda 函数。该过程如下所示:
Add an S3 data source到您的 Algorithmia 帐户,并根据您的需要配置权限。
调用算法时,将输出参数设置为使用该 S3 数据源,例如
“输出”:“s3://algorithm-name/sample-0001.png”
配置 Algorithmia 的 python 客户端以忽略输出。这会导致请求立即返回,而不是等待函数完成:
from Algorithmia.algorithm import OutputType
client.algo("username/algoname")
.set_options(output=OutputType.void)
.pipe(input)
- 创建一个单独的 lambda 函数,即 triggered by S3 object-created events并在那里处理文件。
关于python - AWS Lambda 长时间运行的 http 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43828054/