一、什么是异步迭代器?
实现了 __aiter__() 和 __anext__() 方法的对象。__anext__ 必须返回一个 awaitable对象。async for 会处理异步迭代器的 __anext__() 方法所返回的可等待对象,直到其引发一个 StopAsyncIteration 异常。
二、实例
class AsyncIterable:def __init__(self, iterable):self.iterable = iterabledef __aiter__(self):return selfasync def __anext__(self):if not self.iterable:raise StopAsyncIterationreturn self.iterable.pop(0)async def main():async for i in AsyncIterable([1, 2, 3, 4, 5]):await asyncio.sleep(1)print(i)asyncio.run(main())
在这个例子中,AsyncIterable是一个异步迭代器,它每次产生一个元素,并在产生每个元素后等待1秒。
另一个例子
import asyncioclass Reader(object):""" 自定义异步迭代器(同时也是异步可迭代对象) """def __init__(self):self.count = 0async def readline(self):# await asyncio.sleep(1)self.count += 1if self.count == 10:return Nonereturn self.countdef __aiter__(self):return selfasync def __anext__(self):val = await self.readline()if val == None:raise StopAsyncIterationreturn valasync def func():# 创建异步可迭代对象async_iter = Reader()# async for 必须要放在async def函数内,否则语法错误。async for item in async_iter:print(item)asyncio.run(func())
参考:
【python】async异步编程_python async_ynliii的博客-CSDN博客
https://baijiahao.baidu.com/s?id=1769488614922759759&wfr=spider&for=pc