如何使用asyncio在s3存储桶上下载文件

时间:2017-07-05 00:10:00

标签: python-3.x amazon-s3 boto boto3

我使用以下代码在s3存储桶中下载所有文件:

def main(bucket_name, destination_dir):
    bucket = boto3.resource('s3').Bucket(bucket_name)
    for obj in bucket.objects.all():
        if obj.key.endswith('/'):
            continue
        destination = '%s/%s' % (bucket_name, obj.key)
        if not os.path.exists(destination):
            os.makedirs(os.path.dirname(destination), exist_ok=True)
        bucket.download_file(obj.key, destination)

如果可能,我想知道如何使这种异步。

提前感谢你。

2 个答案:

答案 0 :(得分:0)

开箱即用,boto3不支持asyncio。在此基础上打开tracking issue提供了一些解决方法;它们可能适用于您的用例,也可能不适用。

答案 1 :(得分:0)

Aiobotocore使用aiohttp为botocore库提供asyncio支持。如果您愿意修改代码以使用botocore,那么这将是一个解决方案。