有什么更快的方法可以将多个文件从s3下载到本地文件夹?

乔蒂

我正在尝试使用jupyter笔记本从s3存储桶下载12,000个文件,该文件估计将在21小时内完成下载。这是因为每个文件一次下载一个。我们可以并行进行多次下载,以加快此过程吗?

目前,我正在使用以下代码下载所有文件

### Get unique full-resolution image basenames
images = df['full_resolution_image_basename'].unique()
print(f'No. of unique full-resolution images: {len(images)}')

### Create a folder for full-resolution images
images_dir = './images/'
os.makedirs(images_dir, exist_ok=True)

### Download images
images_str = "','".join(images)
limiting_clause = f"CONTAINS(ARRAY['{images_str}'], 
full_resolution_image_basename)"
_ = download_full_resolution_images(images_dir, 
limiting_clause=limiting_clause)
迭戈·戈丁

请参见下面的代码。由于f字符串(PEP 498,这仅适用于python 3.6+ 对旧版本的python使用不同的字符串格式设置方法。

提供relative_pathbucket_names3_object_keys另外,max_workers是可选的,如果未提供,则该数字将是机器处理器数量的5倍。

此答案的大部分代码来自“如何在Python中创建异步生成器”的答案库中记录该示例的哪些来源

import boto3
import os
from concurrent import futures


relative_path = './images'
bucket_name = 'bucket_name'
s3_object_keys = [] # List of S3 object keys
max_workers = 5

abs_path = os.path.abspath(relative_path)
s3 = boto3.client('s3')

def fetch(key):
    file = f'{abs_path}/{key}'
    os.makedirs(file, exist_ok=True)  
    with open(file, 'wb') as data:
        s3.download_fileobj(bucket_name, key, data)
    return file


def fetch_all(keys):

    with futures.ThreadPoolExecutor(max_workers=5) as executor:
        future_to_key = {executor.submit(fetch, key): key for key in keys}

        print("All URLs submitted.")

        for future in futures.as_completed(future_to_key):

            key = future_to_key[future]
            exception = future.exception()

            if not exception:
                yield key, future.result()
            else:
                yield key, exception


for key, result in fetch_all(S3_OBJECT_KEYS):
    print(f'key: {key}  result: {result}')

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何将文件从s3服务下载到本地文件夹

spring boot如何将s3文件夹中的所有文件下载到本地目录?

如何使用python和boto3将Amazon S3文件下载到文件夹中的本地机器上?

使用 boto3 将驻留在 s3 子文件夹中的特定文件下载到我的本地计算机中

将所有文件从FTP上的特定文件夹下载到本地文件夹

将文件从S3下载到本地计算机

有什么方法可以将移动存储中的文件夹与AWS S3存储桶中的文件夹同步?

将模块下载到本地文件夹后如何在没有pip的情况下安装python模块

将文件和文件夹从Google存储桶下载到本地文件夹

将图像从S3存储桶下载到Lambda临时文件夹(Node.js)

使用Python将所有文件从带日期的SFTP文件夹下载到本地文件夹

Powershell代码将Blob内容的所有子文件夹下载到本地到单个文件夹

使用Python从Public AWS S3下载文件/文件夹,无需凭证

将文件从AWS-S3下载到本地计算机文件系统

使用Boto3从S3下载文件夹

从 S3 将文件下载到我的本地设备时出错

将充满文件的文件夹上载到Amazon S3中的特定文件夹

Amazon boto3将文件从S3下载到tempfile

Codova,我可以将文件下载到(根)/下载文件夹吗?

这个 selenium firefox 配置文件将文件下载到自定义文件夹有什么问题?

直接从URL将文件下载到本地文件夹或远程服务器中的文件夹

如何将文件从AWS S3下载到客户端设备?

使用c#将文件列表从ftp下载到本地文件夹?

仅使用PowerShell将新文件从FTP目录下载到本地文件夹

下载包含浮动字段的 S3 文件夹

AWS 按计划将文件下载到 s3

使用s3cmd时,有什么方法可以停止/继续从AWS S3下载文件吗?

Python - 从特定文件夹/子文件夹 AWS S3 下载数据

如何将多个文件下载到webix中的文件夹中?