我有一个lambda函数,在计算完成后,会发出一些调用将元数据存储在S3和DynamoDB上。
S3上传步骤是函数中最大的瓶颈,所以我想知道是否有办法“触发并忘记”这些调用,以便在函数返回之前不必等待它们。
目前,我正在使用异步并行运行所有上传调用,但是boto3 3/s3 put_object调用仍然是一个很大的瓶颈。我试着使用asyncio.create_task运行协同,而没有等待它们完成,但正如预期的那样,我得到了一堆Task was destroyed but it is pending!错误,而上传实际上并不经过。
如果有办法做到这一点,我们可以节省很多账单,因为正如我所说的,S3是最大的瓶颈。这是可能的,还是我必须处理S3上传时间?
发布于 2021-09-30 23:45:01
如果有办法的话,
遗憾的是,没有,除非您要使用其他lambda功能来做您的上传。这样,您的主要功能将委托耗时的文件处理,并以异步方式上传到第二个函数。然后,您的主函数可以立即返回给调用方,而第二个函数在后台完成这项繁重的工作。
无论哪种方式,您都必须支付第一个或第二个函数的执行时间。
https://stackoverflow.com/questions/69399774
复制相似问题