Asyn c walk_blobs выдает "объект AccessToken не может быть использован в выражении 'await'" - PullRequest
0 голосов
/ 25 апреля 2020

Я бы хотел асинхронно загружать BLOB-объекты, но даже самый первый шаг к списку BLOB-объектов вызывает исключение. Однако перечисление больших двоичных объектов работает, если не асинхронно.

Использование Python 3.7.6 для Windows 10 и установленных Azure пакетов

azure-cli-core==2.2.0
azure-cli-nspkg==3.0.4
azure-cli-telemetry==1.0.4
azure-common==1.1.25
azure-core==1.2.1
azure-graphrbac==0.61.1
azure-mgmt-authorization==0.60.0
azure-mgmt-containerregistry==2.8.0
azure-mgmt-keyvault==2.2.0
azure-mgmt-resource==8.0.1
azure-mgmt-storage==9.0.0
azure-nspkg==3.0.2
azure-storage-blob==12.1.0

Пример кода для воспроизведения проблемы

import asyncio
import azure.storage.blob
from azure.common.client_factory import get_client_from_cli_profile
from azure.storage.blob.aio import ContainerClient


__account_url__ = "put your URL"
__container_name__ = "put your container"


async def main():
    client = get_client_from_cli_profile(
        ContainerClient,
        account_url=__account_url__,
        container_name=__container_name__
    )

    async with client:
        blob_list = [b async for b in client.walk_blobs()]

    return blob_list


def main_not_aysnc():
    client = get_client_from_cli_profile(
        azure.storage.blob.ContainerClient,
        account_url=__account_url__,
        container_name=__container_name__
    )

    with client:
        blob_list = [b for b in client.walk_blobs()]

    return blob_list


if __name__ == "__main__":
    blob_list = asyncio.run(main())
    # blob_list = main_not_aysnc()
    for b in blob_list:
        print(b)

1 Ответ

0 голосов
/ 25 апреля 2020

Попробуйте восстановить элементы, подобные этому

  blob_list = []
        async for w in client.walk_blobs():
            blob_list.append(w)

вместо

 async with client:
        blob_list = [b async for b in client.walk_blobs()]
...