Python
 Computer >> コンピューター >  >> プログラミング >> Python

Pythonのtime.process_time()関数でCPU時間を計測する方法

time.process_time()とは

このチュートリアルでは、Pythonのtime.process_time()メソッドについて詳しく解説します。

time.process_time()は、現在のプロセスにおけるシステムCPU時間とユーザーCPU時間の合計を、秒単位の浮動小数点数(float値)として返します。スリープ中の待機時間は含まれず、CPUが実際に処理に費やした時間だけを計測できる点が大きな特徴です。

基本的な使い方

まずは、timeモジュールをインポートして現在のプロセス時間を出力する、シンプルな例から見ていきましょう。

# timeモジュールをインポート
import time

# 現在のプロセス時間を出力
print(time.process_time())

実行結果

上記のコードを実行すると、以下のような結果が出力されます(実行環境によって値は異なります)。

1.171875

実際の処理時間を計測してみよう

次に、指定した範囲の数値を出力する処理にかかる時間を計測してみましょう。以下のコードを確認して実行してください。

# timeモジュールをインポート
import time

# 指定した範囲の数値を出力する関数
def print_numbers(cap):
    for i in range(cap):
        print(i, end=' ')

if __name__ == '__main__':
    number = 1000
    # 処理開始時のCPU時間を取得
    start_time = time.process_time()
    print_numbers(number)
    # 処理終了時のCPU時間を取得
    end_time = time.process_time()
    print()
    print("Process time", end_time - start_time)

実行結果

上記のコードを実行すると、0から999までの数値が連続して出力され、最後に処理時間が表示されます。

0 1 2 3 4 ... 997 998 999
Process time 0.234375

開始時と終了時の差分を取ることで、print_numbers()関数の実行に要したCPU時間を正確に求められます。

time.time()との違い

処理時間の計測にはtime.time()を使う方法もありますが、両者には重要な違いがあります。

  • time.process_time():現在のプロセスが消費したCPU時間(システム+ユーザー)を返す。スリープ時間は含まれない。
  • time.time():エポック(1970年1月1日)からの実経過時間(壁時計時間)を返す。スリープ時間も含まれる。

CPUへの実際の負荷を測定したい場合はprocess_time()を、ユーザーが体感する経過時間を測りたい場合はtime()を使うのが適切です。

まとめ

本記事では、Pythonのtime.process_time()関数の使い方を解説しました。この関数を活用することで、プログラムが実際にCPUを使用した時間を正確に計測でき、パフォーマンスのチューニングやボトルネックの特定に役立ちます。本チュートリアルについて不明な点がある場合は、コメント欄でお気軽にご質問ください。

  1. Pythonでのベクトル化とは?NumPyによる高速な配列演算の基礎を解説

    本記事では、Python 3.xにおける「ベクトル化(Vectorization)」の概念と、その実装に用いられるさまざまなテクニックについて解説します。ループ処理を排除した効率的なコードの書き方を、具体例とともに見ていきましょう。 ベクトル化とは何か? ベクトル化とは、ループを使用せずに配列操作を実装するテクニックです。関数を活用することで、コードの実行時間や計算時間を大幅に短縮できます。 ベクトル化では、配列に対して個別に処理を行うのではなく、ベクトル全体に対して一括で演算を実行します。代表的な演算には以下のようなものがあります。 ドット積(内積・スカラー積):2つのベクトルから単一のス

  2. Pythonのintersection()関数とは?集合の共通要素(積集合)を求める方法

    この記事では、Pythonのセット(集合)に対して実行できるintersection()関数について詳しく解説します。数学における「積集合(インターセクション)」とは、2つの集合から共通する要素を見つけ出すことを指します。構文<セット名>.intersection(<セットa1>, <セットa2>, …)戻り値引数として渡されたすべての集合に共通する要素(積集合)が、新しいセットとして返されます。使用例set_1 = {t,u,t,o,r,i,a,l} set_2 = {p,o,i,n,t} set_3 = {t,u,t} # 2つの集合の積集合 print