LoginSignup
0
4

More than 1 year has passed since last update.

[python] マルチスレッドを利用して自動化の時間を短縮する -Pool-

Last updated at Posted at 2022-11-07

はじめに

多量のデータを扱う場合、どうしても応答時間が長かったりする。
ネットに接続するとき、0.1秒ほどはかかってしまうが、Webスクレイピングのように無数のurlに接続してデータを取り出す場合はその0.1秒が積み重なってものすごい長い時間になる。
ここではマルチスレッドPoolを利用して自動化の時間を短縮することをまとめた。

環境

window 10
python 3.7.8

Code

import requests
import time

# 開始時間
start_time = time.time()

# 100個分urlを用意した
url_list = [f'https://finance.yahoo.co.jp/quote/{x}.T' for x in range(5000, 5099)]

def get_data(url: str):
    data = requests.get(url)
    return data.status_code

普通モード

result = map(get_data, url_list)
print(list(result))

run_time = time.time() - start_time
print(run_time)
[404, 404, 200, 404, 404, 404, 404, 200, 200, 200, 200, 200, 200, 200, 404, 200, 404, 200, 200, 200, 200, 200, 404, 404, 404, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 404, 200, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 200, 200, 404, 404, 200, 404, 200, 404, 200, 200, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404]
15.092657089233398

マルチスレッド

from multiprocessing.dummy import Pool as ThreadPool

# スレッド4つ
pool = ThreadPool(4)

result = pool.map(get_data, url_list)
print(list(result))

run_time = time.time() - start_time
print(run_time)
[404, 404, 200, 404, 404, 404, 404, 200, 200, 200, 200, 200, 200, 200, 404, 200, 404, 200, 200, 200, 200, 200, 404, 404, 404, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 404, 200, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 200, 200, 404, 404, 200, 404, 200, 404, 200, 200, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404]
4.0459582805633545

まとめ

普通モード(スレッド1つ):約15秒
マルチスレッド(スレッド4つ):約4秒

4つのスレッドを利用したことによって処理速度が約4倍になったことが見える。
urlのように、応答時間が不明、もしくは長い場合に活用するとよいと思われる。

私は実際にpandasで異なる条件で検索していくとき、マルチスレッドを利用してデータを取り出すまでの時間をかなり短縮している

関連

0
4
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
4