gpt4 book ai didi

python - 在 Python 中并行下载多个 S3 对象

转载 作者:行者123 更新时间:2023-11-28 18:16:23 24 4
gpt4 key购买 nike

有没有办法在 Python3 中使用 boto3 同时下载 S3 文件?我知道 aiobotocore图书馆,但我想知道是否有办法使用标准 boto3 来做到这一点图书馆。

最佳答案

如果您想使用 boto3 将大量较小的文件直接并行下载到磁盘,您可以使用 multiprocessing 模块来实现。这里有一个小片段可以做到这一点。你像这样运行它:./download.py bucket_name s3_key_0 s3_key_1 ... s3_key_n

#!/usr/bin/env python3
import multiprocessing
import boto3
import sys

# make a per process s3_client
s3_client = None
def initialize():
global s3_client
s3_client = boto3.client('s3')

# the work function of each process which will fetch something from s3
def download(job):
bucket, key, filename = job
s3_client.download_file(bucket, key, filename)

if __name__ == '__main__':
# make the jobs, arguments to program are: bucket s3_key_0 s3_key_1 ... s3_key_n
bucket = sys.argv[1]
jobs = [(bucket, key, key.replace('/', '_')) for key in sys.argv[2:] ]

# make a process pool to do the work
pool = multiprocessing.Pool(multiprocessing.cpu_count(), initialize)
pool.map(download, jobs)
pool.close()
pool.join()

其中一个重要的部分是我们为每个进程将重用的每个进程创建一个 s3 客户端实例。这很重要,原因有二。首先,创建客户端很慢,因此我们希望尽可能少地创建客户端。其次,不应跨进程共享客户端,因为调用 download_file 可能会改变客户端的内部状态。

关于python - 在 Python 中并行下载多个 S3 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48091874/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com