使用 Python 在 Azure 存储容器上上传多个文件时,上传时间非常慢
Posted
技术标签:
【中文标题】使用 Python 在 Azure 存储容器上上传多个文件时,上传时间非常慢【英文标题】:upload time very slow with multiple file as blob uploads on Azure storage containers using Python 【发布时间】:2020-10-19 08:44:39 【问题描述】:我想存储一些来自我正在使用 Azure 容器创建的应用的反馈部分的用户图像。
虽然我能够存储图像,但对于 3 个每个约 190kb 的文件,该过程需要约 150 到 200 秒
有没有更好的上传文件的方法,或者我在这里遗漏了什么(可能用于上传的文件类型)。
from azure.storage.blob import BlobServiceClient, BlobClient, ContainerClient,ContentSettings
connect_str = 'my_connection_string'
# Create the BlobServiceClient object which will be used to create a container client
blob_service_client = BlobServiceClient.from_connection_string(connect_str)
photos_object_list = []
my_content_settings = ContentSettings(content_type='image/png')
#Files to upload
file_list = ['/Users/vikasnair/Documents/feedbackimages/reference_0.jpg','/Users/vikasnair/Documents/feedbackimages/reference_1.jpeg','/Users/vikasnair/Documents/feedbackimages/reference_2.jpeg']
#creating list of file objects as I would be taking list of file objects from the front end as an input
for i in range(0,len(file_list)):
photos_object_list.append(open(file_list[i],'rb'))
import timeit
start = timeit.default_timer()
if photos_object_list != None:
for u in range(0,len(photos_object_list)):
blob_client = blob_service_client.get_blob_client(container="container/folder", blob=loc_id+'_'+str(u)+'.jpg')
blob_client.upload_blob(photos_object_list[u], overwrite=True, content_settings=my_content_settings)
stop = timeit.default_timer()
print('Time: ', stop - start)
【问题讨论】:
【参考方案1】:您可以采取一些措施来缩短上传时间:
-
为所有上传重复使用
blob_service_client
,而不是为每个文件创建一个新的blob_client
。
使用async blob methods 并行上传所有文件,而不是按顺序上传。
如果目标 blob 父文件夹是静态的,您也可以use an Azure file share with your container instance。这将允许您使用常规文件系统操作将文件持久保存到存储帐户并从中检索文件。
【讨论】:
以上是关于使用 Python 在 Azure 存储容器上上传多个文件时,上传时间非常慢的主要内容,如果未能解决你的问题,请参考以下文章
使用 Azure 数据块从 FileServer 上传到 Azure 存储容器
使用 python 将 csv 文件上传到 azure blob 存储
我需要将 SQL Azure 中的媒体内容(视频或图像)存储上传到 Azure BLOB 容器
如何将静态文件添加/上传到 Azure Blob 存储容器的特定路径