用語比較
timeitとprofileの違い|小さなコード片の比較か、ボトルネックの特定か(Python3基礎)
timeitとprofileの違いは、計測する粒度です。timeitは小さなコード片の実行時間を比べ、profileとpstatsは大きなコードブロックのなかで時間がかかる部分を探します。
Python3基礎試験では、書き方の比較はtimeit、遅い箇所探しはprofileと覚えると、判断しやすくなります。
この記事の目次
この記事の根拠と出典
各セクションの見出しの下に、公式資料で確認した内容か編集部の整理かをラベルで示しています。 試験日・料金・申込条件・試験方式は変わることがあるため、申込前に公式サイトで確認してください。
timeitとprofile・pstatsの要点
timeit
小さなコード片の実行時間を計測する。同じ問題を別の書き方で解いたときの、相対的なパフォーマンスの比較に使う。
profile・pstats
より大きなコードブロックで、律速となる(時間がかかっている)部分を判定するツールを提供する。
違いを表で確認
| 比較軸 | timeit | profile・pstats |
|---|---|---|
| 計測する粒度 | 小さなコード片 | より大きなコードブロック |
| 使う目的 | 同じ問題を異なるアプローチで解いたときの、相対的なパフォーマンスを知る | 処理時間のボトルネックになっている部分を判定する |
| 公式チュートリアルの例 | Timer('t=a; a=b; b=t', 'a=1; b=2').timeit() と Timer('a,b = b,a', 'a=1; b=2').timeit() を比べる | チュートリアルは例を示さず、timeitより大きなコードブロックに使うツールとして紹介している |
| 第10章での位置づけ | 10.10「パフォーマンスの計測」の例に登場する | 10.10で、timeitより大きな粒度のツールとして並べて説明される |
Python3エンジニア認定基礎試験の学習に使う書籍(Amazon)
PRどこで迷っているかを切り分ける
2通りの書き方のどちらが速いか知りたい人
同じ処理を別の書き方で書いた小さなコード片どうしを比べるのが、timeitの使い方です。チュートリアルも、引数の入れ替えを2通りの書き方で比べています。
プログラム全体のどこが遅いのか分からない人
小さなコード片ではなく、より大きなコードブロックのなかで時間がかかる部分を探したいときは、profileとpstatsの出番です。
timeitの秒数の読み方に迷う人
チュートリアルの例では、2つの書き方の数値を並べ、タプルを使う方がほんの少し良いと説明しています。値そのものより、並べた差を読みます。
具体例で使い分ける
例 1
チュートリアル10.10の引数の入れ替えを読む
a と b の値を入れ替えるのに、伝統的な t=a; a=b; b=t と、タプルのパックとアンパックを使う a,b = b,a を比べます。どちらも Timer(コード, 'a=1; b=2').timeit() で計測します。
- timeit モジュールの公式ドキュメントによると、Timer は計測する文(stmt)と、セットアップのための追加の文(setup)を取ります。この例では、2つの書き方のセットアップは、どちらも a=1; b=2 で同じです。
- チュートリアルの出力例では、伝統的な書き方が約0.575、タプルを使う書き方が約0.550です。チュートリアルは、タプルを使う方がパフォーマンスがほんの少し良いと説明しています。
- この計測は、小さな2つのコード片の比較です。プログラム全体のどこが遅いかを調べる作業とは、目的が違います。
結論: 書き方どうしの比較なら timeit です。遅い箇所を探す場面では、profile と pstats に切り替えます。
問題文から答えを選ぶ手順
- 1
計測したい範囲を見る
数行のコード片か、複数の処理を含むコードブロックかを確かめます。
- 2
知りたいことを見る
2つの書き方の差を知りたいならtimeit、どこで時間がかかっているかを知りたいならprofileです。
- 3
設問の語を見る
「小さい粒度」「相対的なパフォーマンス」はtimeit、「律速」「ボトルネック」はprofileとpstatsを指します。
試験での見分け方
- 1timeit は、小さなコード片の実行時間を計測するツール。
- 2profile と pstats は、より大きなコードブロックで律速となる部分を判定するツール。
- 3同じ問題を異なる書き方で解いたときの相対的な差は、timeit で調べる。
- 4チュートリアル10.10は、timeit では小さい粒度を提供しているのに対し、profile や pstats ではより大きなコードブロックを扱うと述べている。
誤答しやすい選択肢
timeit で、プログラム全体の遅い箇所が分かると考える
修正: timeit は小さなコード片の計測用です。遅い箇所の判定は、profile と pstats の役割です。
計測した秒数そのものを、どの環境でも同じ値だと考える
修正: チュートリアルの数値は例です。2つの書き方を同じ条件で並べて、差を読みます。
Timer の第2引数も計測の対象だと考える
修正: timeit の公式ドキュメントでは、第2引数はセットアップのための文(setup)で、a=1; b=2 のような準備を書きます。
確認問題
Q1小さなコード片の実行時間を計測するために、チュートリアルが紹介しているモジュールは?
答え: timeit
チュートリアル10.10は、Timer を使った例で、2通りの書き方の相対的なパフォーマンスを比べています。
Q2より大きなコードブロックで、処理時間の律速となる部分を判定するツールを提供するモジュールは?
答え: profile と pstats
チュートリアル10.10は、timeit より大きな粒度のツールとして紹介しています。
Q3Timer('a,b = b,a', 'a=1; b=2') で、'a=1; b=2' は何を表すか?
答え: セットアップのための文(準備のコード)
timeit モジュールの公式ドキュメントでは、第1引数が計測する文(stmt)、第2引数がセットアップのための文(setup)です。
到達チェック
- timeit が小さなコード片の計測用であることを説明できる
- profile と pstats が大きなコードブロックのボトルネックを探すものだと説明できる
- Timer の第1引数と第2引数の役割を説明できる
関連ページで確認する
同じ資格で次に知りたいこと
- match文とif-elif-elseの違い|同じ値を複数の定数と比べるときの使い分け(Python3基礎)
match文とif-elif-elseの違いを、比べ方・どれにも当てはまらない場合・値の取り出しで整理します。Python公式チュートリアル4.1と4.7の記述、case _ とelseの対応、確認問題つき。
- csv.reader と csv.DictReader の違い|行をリストで読むか、辞書で読むか(Python3基礎)
csv.reader は各行を文字列のリスト、csv.DictReader は各行を辞書で返します。見出し行の扱い、fieldnames・restkey・restval、数値が文字列のままになる点、newline='' の指定を、Python 3.9.6 の実行結果と公式ドキュメントで照合して整理します。
- all()とany()の違い|すべて真か、1つでも真か、空のときの結果(Python3基礎)
all()とany()の違いを、真になる条件、空のイテラブルを渡したときの結果、途中で判定が止まる動き、条件式との組み合わせ方で解説。Python3エンジニア認定基礎試験の確認問題つきです。
よくある質問
Qtimeitとprofileはどちらを使えばよいですか?
2つの書き方の速さを比べるならtimeit、プログラムのどこで時間がかかっているかを調べるならprofileとpstatsです。公式チュートリアル10.10の記述に基づきます。
Qtimeitは何を計測しますか?
小さなコード片の実行時間です。チュートリアルは、Timer にコードと準備のコードを渡して timeit() を呼ぶ例を示しています。
Qpstatsは何のためのモジュールですか?
チュートリアルは、profile とあわせて、より大きなコードブロックで律速となる部分を判定するためのツールとして紹介しています。
QtimeitはPython3基礎試験の出題範囲に含まれますか?
公式の出題範囲は公式チュートリアルの章単位で、10.10「パフォーマンスの計測」は標準ライブラリめぐりの章に含まれます。出題の形式は受験前に公式の案内で確認してください。
次に見る比較
- G検定・DS検定・統計検定2級で重なる用語10語の比較
同じ名前の用語の定義と収録章を、資格ごとに並べます。
- ベイズの定理と条件付き確率の違い(統計検定2級の式と計算例)
求める確率の向きの違いと、陽性になる確率の計算例を確かめます。
- 紛らわしい用語ペア早見表
混同しやすい用語の違いと判定の手掛かりを、資格別の一覧で確かめます。
執筆: AI資格ドリル編集部(運営者情報を見る)
