你可以通过使用多线程来提高上传性能。以下是一些代码示例:
from azure.storage.blob import BlobClient
from threading import Thread
import os
def upload_blob(container, file, index=0, result=None):
if result is None:
result = [None]
try:
blob_name = ''.join(os.path.splitext(os.path.basename(file)))
blob = BlobClient.from_connection_string(
conn_str='CONNECTION STRING',
container_name=container,
blob_name=blob_name
)
with open(file, "rb") as data:
blob.upload_blob(data, overwrite=True)
print(f'Upload succeeded: {blob_name}')
result[index] = True
except Exception as e:
print(e)
result[index] = False
def upload_wrapper(container, files):
parallel_runs = len(files)
threads = [None] * parallel_runs
results = [None] * parallel_runs
for i in range(parallel_runs):
t = Thread(target=upload_blob, args=(container, files[i], i, results))
threads[i] = t
threads[i].start()
for i in range(parallel_runs):
threads[i].join()
可能有更好的分块策略 - 这只是一个示例,说明对于某些情况,使用线程可能会实现更高的Blob上传性能。
以下是顺序循环方法与上述线程方法之间的一些基准测试(482个图像文件,总共26 MB):
我还应该补充一点,您可以考虑通过Python调用azcopy,因为这个工具可能更适合您的特定需求。