使用 BytesIO 代替缓冲区
导致这个问题的原因是 Pillow 在将图像保存到缓冲区时使用了内存映射,但在 AWS Lambda 上这会导致速度变慢。为了解决这个问题,可以使用 Python 的 BytesIO 模块替代缓冲区。这将使图像保存更快,因为它直接在内存中操作数据,而不需要通过磁盘进行 I/O 操作。
以下是使用 BytesIO 代替缓冲区的示例代码:
from io import BytesIO
from PIL import Image
def lambda_handler(event, context):
# 从 S3 下载图像
# ...
# 将图像保存到 BytesIO
img_bytes = BytesIO()
img.save(img_bytes, format='JPEG')
# 上传图像到 S3
# ...
return {'status': 'Success'}
在这个示例中,我们使用 BytesIO 代替了缓冲区。将 Pillow 的 save() 方法的输出直接保存到 img_bytes 中。这将减少了 I/O 操作,并提高了性能。