Перечисление всех больших двоичных объектов - это очень дорогая операция в инфраструктуре хранилища Azure, поскольку она переводится в полное сканирование.
Ниже приведен пример эффективной проверки того, существует ли большой двоичный объект (например, имя файла в вашем случае) или нет в данном контейнере:
from azure.storage.blob import BlockBlobService
from datetime import datetime
def check_if_blob_exists(container_name: str, blob_names: []):
start_time = datetime.now()
if not container_name or container_name.isspace():
raise ValueError("Container name cannot be none, empty or whitespace.")
if not blob_names:
raise ValueError("Block blob names cannot be none.")
block_blob_service = BlockBlobService(account_name="{Storage Account Name}", account_key="{Storage Account Key}")
for blob_name in blob_names:
if block_blob_service.exists(container_name, blob_name):
print("\nBlob '{0}' found!".format(blob_name));
else:
print("\nBlob '{0}' NOT found!".format(blob_name));
end_time = datetime.now()
print("\n***** Elapsed Time => {0} *****".format(end_time - start_time))
if __name__ == "__main__":
blob_names = []
# Exists
blob_names.append("eula.1028.txt")
blob_names.append("eula.1031.txt")
blob_names.append("eula.1033.txt")
blob_names.append("eula.1036.txt")
blob_names.append("eula.1040.txt")
# Don't exist
blob_names.append("blob1")
blob_names.append("blob2")
blob_names.append("blob3")
blob_names.append("blob4")
check_if_blob_exists("containername", blob_names)
Ниже приведен снимок экрана быстрого теста выполнения с моего ноутбука из Западной США (~ 150 Мбит / с загрузки, ~ 3,22 Мбит / с загрузки, на Google Speed Test), проверяющего, существует ли 9 BLOB-объектов в учетной записи хранения LRS в Западной США, как хорошо.
![enter image description here](https://i.stack.imgur.com/gGrnDm.png)