Python のスレッドプールで並列にリクエストを送信してデータを取得する方法

Pythonでは、スレッドプールを使用してコンカレントにデータを取得できます。以下は、簡単なサンプルコードです。

import requests
from concurrent.futures import ThreadPoolExecutor

# 定义请求函数
def fetch(url):
    response = requests.get(url)
    return response.text

# 定义线程池处理函数
def handle_requests(urls):
    # 创建线程池
    with ThreadPoolExecutor(max_workers=5) as executor:
        # 提交请求任务到线程池
        futures = [executor.submit(fetch, url) for url in urls]

        # 获取请求结果
        for future in futures:
            result = future.result()
            # 处理请求结果
            # ...

# 主函数
if __name__ == "__main__":
    urls = ["http://example.com", "http://example.org", "http://example.net"]
    handle_requests(urls)

まず、コード内のfetch関数がHTTPリクエストを開始して応答結果を返すように定義されています。次に、handle_requests関数がURLのリストを受け取り、スレッドプールを使用してリクエストを同時に開始するよう定義されています。そして、メイン関数内にhandle_requests関数が呼び出されてURLのリストが渡されます。

ThreadPoolExecutorはPython標準ライブラリのconcurrent.futuresの機能の一つで、submitメソッドを使ってスレッドプールにタスクを投入でき、返却されたFutureオブジェクトから結果を取得できる。

スレッドプールを使用する際には、スレッドセーフティに注意すると共に、スレッドプールのサイズを適切に制御し、過剰なスレッドによりシステムリソースを無駄にしないようにする必要があります。

bannerAds