Python aiter() ビルトイン関数

Python 3 ドキュメントより

非同期イテラブルの非同期イテレータを返します。x.__aiter__() を呼び出すことと同等です。aiter() は iter() の async 版です。

導入

aiter() 関数は、非同期イテラブルオブジェクトから非同期イテレータを返します。これは iter() 関数の非同期版です。

通常、async for ループを使用する際に aiter() は暗黙的に呼び出されますが、イテレータを手動で操作する場合(多くの場合 anext() と組み合わせて)は直接呼び出すことができます。

非同期イテラブルの例を以下に示します。async for ループは、イテレータを取得するために AsyncCounter オブジェクトに対して自動的に aiter() を呼び出します。

import asyncio

class AsyncCounter:
    def __init__(self, stop):
        self.stop = stop
        self.current = 0

    def __aiter__(self):
        return self

    async def __anext__(self):
        if self.current < self.stop:
            await asyncio.sleep(0.1)
            value = self.current
            self.current += 1
            return value
        else:
            raise StopAsyncIteration

async def main():
    async for number in AsyncCounter(3):
        print(number)

# 実際の環境で実行するには:
# asyncio.run(main())
0
1
2

関連リンク