python - 以多线程方式从 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)
我想知道这个例子是否有一些缺点,例如。并发boto3
API 调用可能会导致某种问题
解决方案
推荐阅读
- javascript - 如何获取在 JavaScript 中使用脚本标记动态加载的 JavaScript 模块的引用?
- java - 无法将字符串转换为双向链表节点
- c# - 如何使用 Windows 运行时使用 C# 实现 C++ API?
- python - 单行if else return语句的Python不同输出
- html - CSS/HTML 按钮动画不正确
- jenkins - 如何根据执行结果在 Jenkins Pipeline 中设置当前构建结果?
- r - 堆积条形图上的R ggplot标签
- swift - 如何使用 Firebase 上游消息发送可操作(丰富)通知?
- scala - Spark中按日期和小时的交叉表
- sql - SQL date_part 返回本地时区而不是参数中的时区