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オブジェクトから結果を取得できる。
スレッドプールを使用する際には、スレッドセーフティに注意すると共に、スレッドプールのサイズを適切に制御し、過剰なスレッドによりシステムリソースを無駄にしないようにする必要があります。