Поделиться через


Хранилище BLOB-объектов Azure примеров кода с использованием клиентских библиотек Python версии 2.1

В этой статье приведены примеры кода, использующие версию 2.1 клиентской библиотеки Хранилище BLOB-объектов Azure для Python.

31 марта 2023 г. прекращена поддержка библиотек пакета SDK Azure, которые не соответствуют текущим рекомендациям по пакету AZURE SDK. Новые библиотеки azure SDK регулярно обновляются для обеспечения согласованного взаимодействия и повышения уровня безопасности. Рекомендуется перейти на новые библиотеки azure SDK, чтобы воспользоваться новыми возможностями и критическими обновлениями для системы безопасности.

Хотя старые библиотеки по-прежнему могут использоваться после 31 марта 2023 г., они больше не будут получать официальную поддержку и обновления от Корпорации Майкрософт. Дополнительные сведения см. в объявлении о прекращении поддержки.

Создание высокодоступного приложения с помощью хранилища BLOB-объектов

Загрузите пример проекта и извлеките (распакуйте) файл storage-python-circuit-breaker-pattern-ha-apps-using-ra-grs.zip. Вы также можете использовать команду git, чтобы загрузить копию приложения в среду разработки. Пример проекта содержит основное приложение Python.

git clone https://github.com/Azure-Samples/storage-python-circuit-breaker-pattern-ha-apps-using-ra-grs.git

Настройка примера

В приложении необходимо указать учетные данные учетной записи хранения. Вы можете хранить эту информацию в переменных среды на локальном компьютере, где выполняется приложение. Чтобы создать переменные среды, выполните один из приведенных ниже примеров в зависимости от операционной системы.

Войдите в свою учетную запись хранения на портале Azure. В меню учетной записи хранения в разделе Параметры выберите Ключи доступа. Вставьте значения для параметров Имя учетной записи хранения и Ключ в следующие команды, заменив заполнители <youraccountname> и <youraccountkey>. Эта команда сохраняет переменные среды на локальном компьютере. В Windows переменная среды доступна только после перезагрузки командной строки или используемой оболочки.

Linux

export accountname=<youraccountname>
export accountkey=<youraccountkey>

Windows

setx accountname "<youraccountname>"
setx accountkey "<youraccountkey>"

Запуск консольного приложения

Чтобы запустить приложение в терминале или в командной строке, перейдите к каталогу circuitbreaker.py, а затем введите python circuitbreaker.py. Приложение передает изображение HelloWorld.png из решения в учетную запись хранения. Приложение проверяет, было ли изображение реплицировано во вторичную конечную точку RA-GZRS. Затем оно начинает скачивать изображение (до 999 раз). Каждая операция чтения помечается буквой P или S. P представляет основную конечную точку, а S — вторичную конечную точку.

В примере кода метод run_circuit_breaker в файле circuitbreaker.py используется для скачивания изображения из учетной записи хранения с помощью метода get_blob_to_path.

Для функции повтора объекта хранилища задана линейная политика повтора. Функция повтора определяет, следует ли повторять запрос, и указывает время ожидания (в секундах) перед повторным выполнением запроса. Задайте для retry_to_secondary значение true, если запрос следует повторять в случае сбоя исходного запроса к основной конечной точке. В примере приложения пользовательская политика повтора определяется в функции retry_callback объекта хранилища.

Перед скачиванием определяется функция retry_callback и response_callback для объекта службы. Эти функции определяют обработчики событий, которые срабатывают при успешном завершении скачивания или при сбое и повторной попытке.

Общие сведения о примере кода

Обработчик события при повторном запуске

Обработчик событий retry_callback вызывается, когда скачивание завершается с ошибкой и настроено на повторный запуск. Если достигнуто максимальное количество попыток, определенных для приложения, значение параметра LocationMode запроса изменяется на SECONDARY. В таком случае приложение принудительно повторно пытается скачать изображение из вторичной конечной точки. Эта конфигурация уменьшает время, затрачиваемое на запрос изображения, так как основная конечная точка не запрашивается бесконечно.

def retry_callback(retry_context):
    global retry_count
    retry_count = retry_context.count
    sys.stdout.write(
        "\nRetrying event because of failure reading the primary. RetryCount= {0}".format(retry_count))
    sys.stdout.flush()

    # Check if we have more than n-retries in which case switch to secondary
    if retry_count >= retry_threshold:

        # Check to see if we can fail over to secondary.
        if blob_client.location_mode != LocationMode.SECONDARY:
            blob_client.location_mode = LocationMode.SECONDARY
            retry_count = 0
        else:
            raise Exception("Both primary and secondary are unreachable. "
                            "Check your application's network connection.")

Обработчик события при успешном выполнении запроса

Обработчик события response_callback вызывается при успешном выполнении запроса. Если приложение использует вторичную конечную точку, приложение запрашивает эту конечную точку до 20 раз. После 20 раза приложение обратно устанавливает для параметра LocationMode значение PRIMARY и повторно запрашивает основную конечную точку. При успешном выполнении запроса приложение продолжает выполнять чтение из основной конечной точки.

def response_callback(response):
    global secondary_read_count
    if blob_client.location_mode == LocationMode.SECONDARY:

        # You're reading the secondary. Let it read the secondary [secondaryThreshold] times,
        # then switch back to the primary and see if it is available now.
        secondary_read_count += 1
        if secondary_read_count >= secondary_threshold:
            blob_client.location_mode = LocationMode.PRIMARY
            secondary_read_count = 0