首页 > 解决方案 > 异步 walk_blob 抛出“对象 AccessToken 不能在 'await' 表达式中使用”

问题描述

我想异步下载 blob,但即使是列出 blob 的第一步也会引发异常。但是,如果不是异步的,列出 blob 就可以工作。

在 Windows 10 上使用 Python 3.7.6 并安装 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)

标签: pythonazureazure-blob-storage

解决方案


尝试检索这样的项目

  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()]

推荐阅读