CodeGym /课程 /Python SELF ZH /异步迭代器和生成器

异步迭代器和生成器

Python SELF ZH
第 26 级 , 课程 3
可用

10.1 AsyncIterator

异步迭代器 (AsyncIterator) 让你能够处理那些异步生成数据的序列。 它们用于异步函数和协程中,方便你遍历那些可能会有延迟的数据,比如从 网络请求、异步I/O操作或其他异步来源获取的数据。

异步迭代器

异步迭代器需要实现两个方法:

方法 __aiter__():

这个方法应该返回异步迭代器本身。它就像同步迭代器中的 __iter__() 方法。

方法 __anext__():

这个方法应该异步返回下一个值,或者如果没有元素了就抛出异常 StopAsyncIteration。 它类似于同步迭代器中的方法 __next__()

例子:


import asyncio

class AsyncIterator:
    def __init__(self, start, end):
        self.current = start
        self.end = end
        
    def __aiter__(self):
        return self
        
    async def __anext__(self)(self):
        if self.current >= self.end:
            raise StopAsyncIteration
        
        await asyncio.sleep(1)  # 模拟异步延迟
        self.current += 1
        return self.current
        
async def main():
    async for number in AsyncIterator(1, 5):
        print(number)
        
asyncio.run(main())

异步迭代器让你能够在数据到达的同时处理数据,而不阻塞其他任务的执行。 这在处理网络请求和其他异步操作时特别有用。

使用异步迭代器可以让你写出更可读和更易维护的代码来异步处理数据序列。

10.2 AsyncGenerator

异步生成器让你可以用 asyncawait 关键字来异步生成值。 它们的工作原理类似于普通生成器,但可以暂停执行以执行异步操作。

创建异步生成器

定义异步生成器需要使用 async defyield。 异步生成器可以在内部使用 await 来执行异步操作。

例子:


async def async_generator():
    for i in range(3):
        await asyncio.sleep(1)  # 异步延迟
        yield i  # 生成值

使用异步生成器

你可以在异步函数中用 async for 语句来使用异步生成器。


import asyncio

async def main():
    async for value in async_generator():
        print(value)
            
asyncio.run(main())

异步生成器通过使用简单的 async for 语法结构来提高代码的可读性和可维护性, 从而处理异步数据序列。

评论
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION