You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Python SDK管理Azure资源锁遇AsyncItemPaged迭代错误求助

解决Azure Python异步SDK遍历Resource Lock的问题

你遇到的TypeError: 'AsyncItemPaged' object is not iterable错误,核心原因是Azure异步SDK返回的AsyncItemPaged是异步可迭代对象,不能用普通的同步for循环遍历,同时异步方法调用必须加await关键字。

修正方案1:使用异步迭代遍历(推荐)

直接用async for遍历异步分页对象,同时给delete方法加上await:

from azure.mgmt.resource.locks.v2016_09_01.aio import ManagementLockClient

async def clear_resource_group_locks(credential, subscription, resource_group_snapshot):
    management_lock_client = ManagementLockClient(credential, subscription.subscription_id)
    # 获取异步分页的锁列表
    locks = management_lock_client.management_locks.list_at_resource_group_level(resource_group_snapshot)
    
    # 异步遍历每个锁并删除
    async for lock in locks:
        await management_lock_client.management_locks.delete(resource_group_snapshot, lock.name)

修正方案2:先转为普通列表再遍历

如果需要先获取所有锁的集合再处理,可以用await list(locks)将异步分页对象转为普通列表,之后用同步for循环(但删除操作仍需await):

from azure.mgmt.resource.locks.v2016_09_01.aio import ManagementLockClient

async def clear_resource_group_locks(credential, subscription, resource_group_snapshot):
    management_lock_client = ManagementLockClient(credential, subscription.subscription_id)
    locks = management_lock_client.management_locks.list_at_resource_group_level(resource_group_snapshot)
    
    # 将异步分页对象转为普通列表
    locks_list = await list(locks)
    for lock in locks_list:
        await management_lock_client.management_locks.delete(resource_group_snapshot, lock.name)

关键注意点

  • 所有异步SDK的方法(包括list_at_resource_group_level返回的分页对象、delete方法)都必须在异步上下文里执行,比如你需要用asyncio.run(clear_resource_group_locks(...))来触发这个异步函数
  • 方案1的异步迭代更适合大量锁的场景,因为它会分批从Azure拉取数据,避免一次性加载所有数据占用过多内存

内容的提问来源于stack exchange,提问作者MoonHorse

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 19:20:07