0
0

Pythonで並行リクエストを処理する(aiohttp)

Posted at

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エンドポイントからのデータ取得や、複数のサーバーへの同時アクセスが容易になります。

質問やフィードバックがあれば、コメントでお知らせください。ありがとうございました。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0