Python 的內置函數 aiter() 是 Python 3.10 版本中新增的異步迭代器函數,用於獲取異步可迭代對象的異步迭代器。以下是關於 aiter() 的詳細説明:
基本功能
aiter() 是 iter() 的異步版本,它接受一個異步可迭代對象(async iterable)作為參數,返回對應的異步迭代器(async iterator)。異步可迭代對象是指實現了 __aiter__() 方法的對象。
語法
aiter(async_iterable)
async_iterable: 必須是一個異步可迭代對象
與 iter() 的區別
iter()用於同步迭代,aiter()用於異步迭代iter()調用__iter__(),aiter()調用__aiter__()iter()返回同步迭代器,aiter()返回異步迭代器
使用示例
import asyncio
class AsyncCounter:
def __init__(self, stop):
self.current = 0
self.stop = stop
def __aiter__(self):
return self
async def __anext__(self):
if self.current < self.stop:
await asyncio.sleep(0.1)
self.current += 1
return self.current
else:
raise StopAsyncIteration
async def main():
async for i in aiter(AsyncCounter(3)):
print(i)
asyncio.run(main())
注意事項
- 只能在異步函數(async def)中使用
- 需要與
async for和anext()配合使用 - 異步迭代結束時拋出
StopAsyncIteration異常而非StopIteration
典型應用場景
- 異步數據庫查詢結果的遍歷
- 異步網絡請求的分頁處理
- 實時數據流的異步消費
- 異步事件處理循環
錯誤處理
如果嘗試對非異步可迭代對象使用 aiter(),會引發 TypeError:
>>> aiter([1,2,3])
TypeError: 'list' object is not async iterable
性能考慮
使用異步迭代器可以避免阻塞事件循環,特別適合I/O密集型操作,但會增加一定的異步調度開銷。