我正在将一个简单的 python 3 脚本移植到 AWS Lambda。该脚本很简单:它从十几个 S3 对象收集信息并返回结果。
该脚本用于multiprocessing.Pool并行收集所有文件。但由于缺少,multiprocessing因此无法在 AWS Lambda 环境中使用。/dev/shm所以我想与其写一个脏multiprocessing.Process/multiprocessing.Queue替换,不如尝试asyncio一下。
aioboto3我正在Python 3.8 上使用最新版本(8.0.5)。
我的问题是,我似乎无法在文件的天真顺序下载和异步事件循环复用下载之间获得任何改进。
这是我的代码的两个版本。
import sys
import asyncio
from concurrent.futures import ThreadPoolExecutor, ProcessPoolExecutor
import boto3
import aioboto3
BUCKET = 'some-bucket'
KEYS = [
'some/key/1',
[...]
'some/key/10',
]
async def download_aio():
"""Concurrent download of all objects from S3"""
async with aioboto3.client('s3') as s3:
objects = [s3.get_object(Bucket=BUCKET, Key=k) for k in KEYS]
objects = await asyncio.gather(*objects) …Run Code Online (Sandbox Code Playgroud)