Python:快速上传大文件 S3
Posted
技术标签:
【中文标题】Python:快速上传大文件 S3【英文标题】:Python: upload large files S3 fast 【发布时间】:2018-10-10 19:39:47 【问题描述】:我正在尝试以编程方式在 S3 上上传一个最大为 1GB 的超大文件。当我发现 AWS S3 支持大文件的分段上传时,我找到了一些 Python 代码来做到这一点。 (link)
我的观点:上传速度太慢(几乎 1 分钟)。
有什么方法可以提高分段上传的性能。或者任何好的库支持 S3 上传
【问题讨论】:
如果您使用 WiFi,我认为您的主要限制是您的 Internet 连接和本地网络。听起来您的上传速度接近 20Mb/秒,这几乎没有什么可嘲笑的。您是否尝试过 speedtest 以查看您的 Internet 上传带宽是多少? 我使用办公室wifi进行测试,上传速度在30Mps左右。我要做的是尽可能优化上传代码,以应对现实场景中的不稳定网络 我还发现如果我使用“put_object”的方法,上传速度会快很多,所以我不明白分段上传有什么意义 【参考方案1】:在此处留下我的答案以供参考,使用此代码可提高两倍的性能:
import boto3
from boto3.s3.transfer import TransferConfig
s3_client = boto3.client('s3')
S3_BUCKET = 'mybucket'
FILE_PATH = '/path/to/file/'
KEY_PATH = "/path/to/s3key/"
def uploadFileS3(filename):
config = TransferConfig(multipart_threshold=1024*25, max_concurrency=10,
multipart_chunksize=1024*25, use_threads=True)
file = FILE_PATH + filename
key = KEY_PATH + filename
s3_client.upload_file(file, S3_BUCKET, key,
ExtraArgs= 'ACL': 'public-read', 'ContentType': 'video/mp4',
Config = config,
Callback=ProgressPercentage(file)
)
uploadFileS3('upload.mp4')
特别感谢@BryceH 的建议。虽然解决方案确实提高了 S3 上传的性能,但我仍然愿意接受任何更好的解决方案。谢谢
【讨论】:
这个解决方案看起来很优雅,但它不起作用。响应为 NULL。因此,我们要求您发布经过验证的答案。 仅仅因为它返回 null 并不意味着它不起作用(确实如此)。对于那些寻找 ProgressPercentage() 的人,可以从boto3.amazonaws.com/v1/documentation/api/latest/_modules/boto3/… 复制/粘贴【参考方案2】:对于互联网上的这么多数据,1 GB 的 1 分钟是相当快的。您应该为此用例考虑 S3 传输加速。 https://docs.aws.amazon.com/AmazonS3/latest/dev/transfer-acceleration.html
【讨论】:
是的,我会考虑这个配置。现在我专注于编码。以上是关于Python:快速上传大文件 S3的主要内容,如果未能解决你的问题,请参考以下文章