1. はじめに
並行リクエストは、複数のHTTPリクエストを同時に処理するために使用されます。
これにより、複数のAPIエンドポイントからのデータ取得や、複数のサーバーへの同時アクセスが効率化されます。
2. 必要なライブラリのインストール
まず、aiohttpをインストールします。以下のコマンドをターミナルで実行してください。
pip install aiohttp
3. 並行リクエストのサンプルコード
以下のコードは、複数のURLに対して並行してGETリクエストを送信し、そのレスポンスを取得する例です。
import aiohttp
import asyncio
async def fetch(session, url):
async with session.get(url) as response:
return await response.text()
async def main(urls):
async with aiohttp.ClientSession() as session:
tasks = [fetch(session, url) for url in urls]
responses = await asyncio.gather(*tasks)
return responses
# リクエストするURLのリスト
urls = [
"https://jsonplaceholder.typicode.com/posts/1",
"https://jsonplaceholder.typicode.com/posts/2",
"https://jsonplaceholder.typicode.com/posts/3"
]
# メイン関数を実行
responses = asyncio.run(main(urls))
# 結果を出力
for i, response in enumerate(responses):
print(f"Response from {urls[i]}:")
print(response[:200]) # 最初の200文字のみ表示
print("\n")
4. コードの解説
- fetch関数: sessionオブジェクトを使って指定されたURLにGETリクエストを送り、そのレスポンスを返す非同期関数です。
- main関数: 複数のURLに対してfetch関数を並行して実行するためのタスクを作成し、それらをasyncio.gatherを使って実行します。すべてのリクエストが完了するまで待ち、レスポンスを返します。
- urlsリスト: リクエストを送信するURLのリストです。
- asyncio.run: main関数を実行して、レスポンスを取得します。
- 結果の出力: 各レスポンスの最初の200文字を出力します。
5. まとめ
aiohttpとasyncioを組み合わせることで、効率的に並行リクエストを処理することができます。これにより、複数のAPIエンドポイントからのデータ取得や、複数のサーバーへの同時アクセスが容易になります。
質問やフィードバックがあれば、コメントでお知らせください。ありがとうございました。