目次
はじめに
Python 3.11 で新たに導入された anext
関数は、非同期ジェネレーターから次の要素を取得するための便利な関数です。本記事では anext
関数の基本から応用まで詳しく解説し、初心者でも理解できるように実践的なコード例を紹介します。
anext関数とは?
anext
関数は、非同期イテレーター(async iterator)から次の値を取得するための組み込み関数です。従来、非同期ジェネレーターを操作するには async for
を用いるのが一般的でしたが、 anext
を使用すると手軽に次の値を取得できます。
anext関数の基本構文
anext
の基本的な使い方は以下の通りです。
import asyncio
async def async_generator():
for i in range(3):
yield i
await asyncio.sleep(1)
async def main():
agen = async_generator()
first_value = await anext(agen)
print(first_value) # 0
asyncio.run(main())
anext
の構文
await anext(async_iterator, default_value)
async_iterator
:非同期イテレーター(async for
で使用できるオブジェクト)default_value
(オプション):イテレーターが終了した場合に返すデフォルト値
anext関数の使用例
以下に、基本的な anext
の使用例を示します。
例1:非同期ジェネレーターの次の値を取得
import asyncio
async def async_generator():
for i in range(5):
yield i
await asyncio.sleep(1)
async def main():
agen = async_generator()
print(await anext(agen)) # 0
print(await anext(agen)) # 1
asyncio.run(main())
例2:デフォルト値の利用
import asyncio
async def empty_async_generator():
if False:
yield
async def main():
agen = empty_async_generator()
value = await anext(agen, "No Data")
print(value) # "No Data"
asyncio.run(main())
anext関数の応用例
応用例1:非同期ストリームデータ処理
以下の例では、非同期ストリームのデータを anext
を用いて取得します。
import asyncio
async def stream_data():
data = ["A", "B", "C"]
for item in data:
yield item
await asyncio.sleep(1)
async def main():
stream = stream_data()
while True:
try:
value = await anext(stream)
print("Received:", value)
except StopAsyncIteration:
break
asyncio.run(main())
応用例2:非同期リクエスト処理
import asyncio
import aiohttp
async def fetch(url):
async with aiohttp.ClientSession() as session:
async with session.get(url) as response:
yield await response.text()
async def main():
url = "<https://example.com>"
content_gen = fetch(url)
content = await anext(content_gen, "Failed to fetch")
print(content)
asyncio.run(main())
まとめ
anext
関数は、非同期ジェネレーターから簡単に次の値を取得できる便利な関数です。特に、非同期ストリーム処理や Web リクエストの結果を処理する際に活用できます。本記事で紹介した基本的な使い方と応用例を参考に、anext
を実際のプロジェクトに活用してみてください。