処理が遅くなって原因を追った記録|Python実践ログ | SORAXIOM

処理が遅くなって原因を追った記録

スポンサーリンク
Python実践ログ
スポンサーリンク

ある日、急に遅くなった

それまでは特に問題なく動いていたスクリプトが、
ある日を境に明らかに遅くなりました。

  • データ量は少し増えただけ
  • 処理内容もほとんど変えていない

「そのうち直そう」と思いつつ、
待ち時間が無視できなくなり、
原因を追うことにしました。


最初に疑ったこと

最初は、なんとなく重そうな部分を疑いました。

  • ファイル読み込み
  • ループの回数
  • 条件分岐の多さ

ですが、感覚だけでは、
どこが遅いのか分かりません。


とりあえず時間を測ってみた

そこで、処理ごとに時間を出すことにしました。

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)

これだけで、
体感でも分かるほど速くなりました。


作って分かったこと

この経験で分かったのは、

  • 遅さは勘では分からない
  • まず測るのが一番早い
  • 問題は意外な場所にある

ということです。


おわりに

この話は、
処理が遅くなった原因を
一つずつ追っていった実践ログです。

最適化よりも先に、
観察すること が大切だと感じました。

コメント

タイトルとURLをコピーしました