本文展示了一个 异步生成器 alternatinggenerator,它能够交替地从两个其他异步生成器中获取值。 该代码实现了异步迭代协议 (__ter__ 和 __anext__),允许使用 async for 循环或手动调用 anext 来迭代结果。
alternatinggenerator 类接受两个异步生成器作为输入 (gen1 和 gen2)。__anext__ 方法的核心逻辑在于它交替地从 gen1 和 gen2 中获取下一个值。当一个生成器完成迭代(抛出 StopAsyncIteration 异常)时,该生成器会被标记为已完成,__anext__ 方法会递归调用自身,继续从另一个生成器中获取值,直到两个生成器都完成。
示例代码中,three() 生成器生成 3, 13, 23, 33 的序列,five() 生成器生成 5, 15, 25, … 的序列。main() 函数创建一个 alternatinggenerator 实例,并使用 while True 循环和 anext 函数交替打印来自两个生成器的值,直到所有值都被打印。 try…except 块处理 StopAsyncIteration 异常,确保程序在生成器完成时优雅地退出。
输出结果展示了 alternatinggenerator 正确地交替从两个生成器中获取值:3, 5, 13, 15, 23, 25, 35, 45, 55, 65, 75, 85, 95. 注意,由于 sleep(0.25) 的存在,每个数字的输出之间会有短暂的延迟。 如果去掉 sleep 函数,输出速度将会更快。 这突显了异步生成器在处理耗时操作时的优势。
立即学习“”;
以上就是Python 中的交替异步生成器的详细内容,更多请关注php中文网其它相关文章!