ある日、急に遅くなった
それまでは特に問題なく動いていたスクリプトが、
ある日を境に明らかに遅くなりました。
- データ量は少し増えただけ
- 処理内容もほとんど変えていない
「そのうち直そう」と思いつつ、
待ち時間が無視できなくなり、
原因を追うことにしました。
最初に疑ったこと
最初は、なんとなく重そうな部分を疑いました。
- ファイル読み込み
- ループの回数
- 条件分岐の多さ
ですが、感覚だけでは、
どこが遅いのか分かりません。
とりあえず時間を測ってみた
そこで、処理ごとに時間を出すことにしました。
import time
start = time.time()
rows = read_csv(file)
print("read:", time.time() - start)
start = time.time()
result = process_rows(rows)
print("process:", time.time() - start)
これだけで、
遅さの正体がかなり見えてきました。
本当に遅かったのは別の場所
結果として分かったのは、
- 読み込みではなく
- 計算でもなく
- 毎回行っていた無駄な処理
でした。
同じ処理を、
ループの中で何度も呼んでいたのです。
直した内容は小さかった
修正したのは、
処理の位置を変えただけでした。
cached = prepare_data()
for r in rows:
result = use_cached_data(r, cached)
これだけで、
体感でも分かるほど速くなりました。
作って分かったこと
この経験で分かったのは、
- 遅さは勘では分からない
- まず測るのが一番早い
- 問題は意外な場所にある
ということです。
おわりに
この話は、
処理が遅くなった原因を
一つずつ追っていった実践ログです。
最適化よりも先に、
観察すること が大切だと感じました。


コメント