AI資格ドリル
資格を選ぶ

用語比較

timeitとprofileの違い|小さなコード片の比較か、ボトルネックの特定か(Python3基礎)

timeitとprofileの違いは、計測する粒度です。timeitは小さなコード片の実行時間を比べ、profileとpstatsは大きなコードブロックのなかで時間がかかる部分を探します。

Python3基礎試験では、書き方の比較はtimeit、遅い箇所探しはprofileと覚えると、判断しやすくなります。

この記事の根拠と出典

各セクションの見出しの下に、公式資料で確認した内容か編集部の整理かをラベルで示しています。 試験日・料金・申込条件・試験方式は変わることがあるため、申込前に公式サイトで確認してください。

timeitとprofile・pstatsの要点

timeit

小さなコード片の実行時間を計測する。同じ問題を別の書き方で解いたときの、相対的なパフォーマンスの比較に使う。

profile・pstats

より大きなコードブロックで、律速となる(時間がかかっている)部分を判定するツールを提供する。

違いを表で確認

比較軸timeitprofile・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

ほかの資格を含む参考書・問題集の一覧を見る

どこで迷っているかを切り分ける

01

2通りの書き方のどちらが速いか知りたい人

同じ処理を別の書き方で書いた小さなコード片どうしを比べるのが、timeitの使い方です。チュートリアルも、引数の入れ替えを2通りの書き方で比べています。

02

プログラム全体のどこが遅いのか分からない人

小さなコード片ではなく、より大きなコードブロックのなかで時間がかかる部分を探したいときは、profileとpstatsの出番です。

03

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. 1

    計測したい範囲を見る

    数行のコード片か、複数の処理を含むコードブロックかを確かめます。

  2. 2

    知りたいことを見る

    2つの書き方の差を知りたいならtimeit、どこで時間がかかっているかを知りたいならprofileです。

  3. 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引数の役割を説明できる

同じ資格で次に知りたいこと

よくある質問

Qtimeitとprofileはどちらを使えばよいですか?

A

2つの書き方の速さを比べるならtimeit、プログラムのどこで時間がかかっているかを調べるならprofileとpstatsです。公式チュートリアル10.10の記述に基づきます。

Qtimeitは何を計測しますか?

A

小さなコード片の実行時間です。チュートリアルは、Timer にコードと準備のコードを渡して timeit() を呼ぶ例を示しています。

Qpstatsは何のためのモジュールですか?

A

チュートリアルは、profile とあわせて、より大きなコードブロックで律速となる部分を判定するためのツールとして紹介しています。

QtimeitはPython3基礎試験の出題範囲に含まれますか?

A

公式の出題範囲は公式チュートリアルの章単位で、10.10「パフォーマンスの計測」は標準ライブラリめぐりの章に含まれます。出題の形式は受験前に公式の案内で確認してください。

次に見る比較

執筆: AI資格ドリル編集部(運営者情報を見る)