【问题标题】:Pillow save to buffer slow on aws lambda枕头保存以缓冲 aws lambda 上的缓慢
【发布时间】:2021-09-24 15:22:31
【问题描述】:

我正在开发一项服务,以创建托管 aws lambda 的叠加图像。在设法设置所有要求并实际运行后,我注意到代码运行得非常慢。我设法将问题跟踪到我在将 PIL 图像保存到可以发送到 s3 存储桶的对象时使用的图像的内存缓冲。这是有问题的代码:

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 而不是 PNG。

标签: python aws-lambda python-imaging-library in-memory


【解决方案1】:

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

【讨论】:

  • 这就是为什么我问你尺寸(以像素为单位)——因为这决定了所需的内存——而不是输出文件的大小(以字节为单位)。
猜你喜欢
  • 2017-09-23
  • 2019-07-23
  • 1970-01-01
  • 2021-04-01
  • 1970-01-01
  • 2017-12-04
  • 2011-08-27
  • 2012-09-13
  • 1970-01-01
相关资源
最近更新 更多