python - 异步 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)
解决方案
尝试检索这样的项目
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()]
推荐阅读
- java - 在不同的方法(同一类)上访问 ArrayList
- android - Android Studio:缩放 ImageView 边界以适应图像
- mysql - 在同一台机器上安装多个 MySQL 集群 - CentOS 7
- wordpress - 没有得到插件中制作的模板内容
- java - Kafka 连接自定义转换以将无模式 Json 转换为 Avro
- javascript - ReferenceError:找不到变量 Safari
- reactjs - npm 错误!依赖“@babel/core”的对象为空
- javascript - 如何在 Handsontable 中使用钩子。我需要在粘贴前检查数据
- node.js - 在 MEAN 应用程序中实现实时通知的最佳方式是什么?
- r - 在 for 循环中使用 st_write 导出多个形状文件