首页 > 解决方案 > 以多线程方式从 s3 (boto3) 读取文件

问题描述

我想处理位于 s3 存储桶中的一个巨大的 XML 文件文件夹。我想在 Python 中以分布式方式执行此操作。

所以我首先定义了一个带有boto3库的分页器,设置(例如)100元素的页面大小(请参阅doc

profile = boto3.Session()
client = profile.client('s3')
paginator = client.get_paginator('list_objects')

page_iterator = paginator.paginate(
    Bucket='my-bucket',Prefix='my-prefix',
    PaginationConfig={'PageSize': 100}
)

之后使用concurrent.futures包我创建了一个线程池,10每个线程都调用my_process_method

def my_process_method(pages):
    for page in pages['Contents']:
        # ...process...

with concurrent.futures.ThreadPoolExecutor(10) as executor:
    executor.map(my_process_method, page_iterator)

我想知道这个例子是否有一些缺点,例如。并发boto3API 调用可能会导致某种问题

标签: pythonmultithreadingamazon-s3boto3python-multithreading

解决方案


推荐阅读