枕头保存到aws lambda上的缓冲缓慢



我正在开发一个服务,用于创建托管在aws lambda上的叠加图像。在设法设置所有需求并实际使其工作之后,我注意到代码运行得非常慢。我设法将问题跟踪到我在将PIL映像保存到可以发送到s3 bucket的对象时使用的映像的内存缓冲。下面是有问题的代码:

def to_s3(img, s3_bucket, key):
logger.info("attempting to upload {} from s3".format(key))
buffer = BytesIO()
ts = time()
img.save(buffer, "PNG")
logger.info("image inmem save time {}".format(time() - ts))
buffer.seek(0)
sent_data = s3_bucket.put_object(Key=key, Body=buffer)

img。save(buffer, "PNG")函数花了大约10秒来写一个大约1.8mb的图像,这似乎不合理。所以我的问题是:

  • 是否有一种方法可以提高在aws lambda上缓冲图像的速度?
  • 是否有不同的方法将枕头图像发送到s3桶?
  • 是否有办法配置lambda函数来更快地管理这些进程(例如增加内存)

欢迎提出任何建议。我住的地方现在是周五晚上,我希望周末不用工作。提前谢谢。

好的,在本地做了一些基准测试,看起来(至少在那个环境中)保存到内存缓冲区和保存到文件需要大约相同的处理时间。按照评论中的建议保存为jpeg也提高了大小和速度。问题在于lambdas内存分配。将lambda从256扩展到3072mb,将节省时间降低到大约1.5秒,尽管仍然很慢,但仍然是一个改进。我是新手,所以不要太苛刻。

最新更新