読み込み中...

Pythonでの時間計測法!初心者向けガイド10選

Pythonのコードを使った時間計測方法の図解 Python
この記事は約15分で読めます。

【サイト内のコードはご自由に個人利用・商用利用いただけます】

この記事では、プログラムの基礎知識を前提に話を進めています。

説明のためのコードや、サンプルコードもありますので、もちろん初心者でも理解できるように表現してあります。

本記事のサンプルコードを活用して機能追加、目的を達成できるように作ってありますので、是非ご活用ください。

※この記事は、一般的にプロフェッショナルの指標とされる『実務経験10,000時間以上』を満たす現役のプログラマチームによって監修されています。

※Japanシーモアは、常に解説内容のわかりやすさや記事の品質に注力しております。不具合、分かりにくい説明や不適切な表現、動かないコードなど気になることがございましたら、記事の品質向上の為にお問い合わせフォームにてご共有いただけますと幸いです。
(送信された情報は、プライバシーポリシーのもと、厳正に取扱い、処分させていただきます。)

はじめに

Pythonを学び始めたばかりの方や、既に一通りPythonを使いこなしている方に向けて、本記事ではPythonでの時間計測方法を10種類ご紹介します。

時間計測はプログラムのパフォーマンス分析やデバッグ、さらには効率的なコード作成において重要な要素となります。

それぞれの時間計測方法について、具体的なサンプルコードとその解説、注意点や対処法、カスタマイズの仕方を詳しく説明します。

Pythonで時間計測を行う際の参考になれば幸いです。

●Pythonと時間計測について

○Pythonとは

Pythonは、易しさ、可読性、そして多機能さから多くの開発者に支持されているプログラミング言語です。

Pythonの強みはその多機能性で、データ分析、ウェブ開発、人工知能(AI)の分野で広く利用されています。

さらに、Pythonのコードは読みやすく、初心者にも理解しやすいことが特徴となっています。

○時間計測の重要性

時間計測は、コードの効率性を評価し、最適化するための重要な手段となります。

特に大規模なプロジェクトや、大量のデータを扱う場合、プログラムの実行時間を最小限にすることで、効率的なシステムを実現することができます。

また、時間計測を行うことで、プログラムのどの部分が最も時間を要しているかを特定し、その部分を最適化することが可能となります。

●Pythonで時間計測を行う方法10選

Pythonでは様々な方法で時間計測を行うことが可能です。

それでは、それぞれの方法について、サンプルコードとともに詳しく解説します。

○サンプルコード1:timeモジュールを使う

timeモジュールはPythonで最も基本的な時間計測方法です。

下記のサンプルコードはtimeモジュールを用いて、任意のコード(ここでは1から10000までの数の和を計算するコード)の実行時間を計測する方法を表しています。

import time

start_time = time.time()
# 実行したいコード
total = sum(range(10000))
end_time = time.time()

execution_time = end_time - start_time
print(f"実行時間: {execution_time}秒")

このコードでは、time.time()を用いて現在の時間を取得し、任意のコードの前後でその時間を計測しています。

そして、コードの実行が終わった時間から開始時間を引くことで、コードの実行にかかった時間を計測しています。

この例では1から10000までの数の和を計算することで、計測したい任意のコードを実行しています。

このコードを実行すると、「実行時間: (実行時間)秒」と表示されます。

このようにして得られた結果は、実行したコードのパフォーマンスを評価するための重要な指標となります。

○サンプルコード2:datetimeモジュールを使う

datetimeモジュールを使用することで、より高精度な時間計測が可能となります。

下記のサンプルコードは、datetimeモジュールを使って実行時間を計測する方法を表しています。

from datetime import datetime

start_time = datetime.now()
# 実行したいコード
total = sum(range(10000))
end_time = datetime.now()

execution_time = end_time - start_time
print(f"実行時間: {execution_time}秒")

このコードでは、datetime.now()を使って現在の日時を取得し、任意のコードの実行開始と終了の日時を取得しています。

そして、終了日時から開始日時を引くことで、コードの実行時間を計測します。

実行すると、「実行時間: (実行時間)秒」と表示され、timeモジュールを用いた場合と同様に、実行したコードのパフォーマンスを評価するための指標となります。

○サンプルコード3:timeitモジュールを使う

timeitモジュールは、小さなコードスニペットの実行時間を測定するために設計されています。

下記のサンプルコードは、timeitモジュールを使って実行時間を計測する方法を表しています。

import timeit

execution_time = timeit.timeit('sum(range(10000))', number=1000)
print(f"実行時間: {execution_time / 1000}秒")

このコードでは、timeit.timeit()を使って実行時間を計測しています。

timeit.timeit()は引数として測定したいコード(ここでは'sum(range(10000))')と実行回数(ここではnumber=1000)を取ります。

そして、そのコードを指定した回数だけ実行し、総実行時間を返します。

実行すると、「実行時間: (実行時間)秒」と表示されます。

ここでの実行時間は、指定したコードを1000回実行したときの平均実行時間となります。

○サンプルコード4:perf_counterを使う

timeモジュールのperf_counter関数は、Pythonでの高精度な時間計測に使用されます。

システムのクロックを使用し、最大限に精度の高い時間を提供します。

次のコードでは、perf_counterを使用して実行時間を計測する方法を紹介します。

import time

start_time = time.perf_counter()
# 実行したいコード
total = sum(range(10000))
end_time = time.perf_counter()

execution_time = end_time - start_time
print(f"実行時間: {execution_time}秒")

このコードでは、time.perf_counter()を使って開始時点と終了時点の時間を取得し、その差分からコードの実行にかかった時間を計測しています。

この例では1から10000までの数の和を計算することで、計測したい任意のコードを実行しています。

このコードを実行すると、「実行時間: (実行時間)秒」と表示されます。

ここで得られた実行時間は、実行したコードのパフォーマンスを評価するための指標となります。

○サンプルコード5:process_timeを使う

timeモジュールのprocess_time関数も時間計測に使用します。

この関数は、プロセスのCPU時間を返します。

つまり、この時間はシステムの待機時間などを含まず、実際にプロセスがCPUを使用した時間を表します。

次のコードでは、process_timeを使用して実行時間を計測する方法を紹介します。

import time

start_time = time.process_time()
# 実行したいコード
total = sum(range(10000))
end_time = time.process_time()

execution_time = end_time - start_time
print(f"実行時間: {execution_time}秒")

このコードでは、time.process_time()を使って開始時点と終了時点の時間を取得し、その差分からコードの実行にかかった時間を計測しています。

この例では1から10000までの数の和を計算することで、計測したい任意のコードを実行しています。

このコードを実行すると、「実行時間: (実行時間)秒」と表示されます。

ここで得られた実行時間は、実行したコードのパフォーマンスを評価するための指標となります。

○サンプルコード6:monotonicを使う

timeモジュールのmonotonic関数は、経過時間の測定に特化しています。

システムクロックの変更(例えば、夏時間への切り替えなど)の影響を受けずに、時間を一貫して計測することができます。

下記のコードでは、monotonicを使用して実行時間を計測する方法を紹介します。

import time

start_time = time.monotonic()
# 実行したいコード
total = sum(range(10000))
end_time = time.monotonic()

execution_time = end_time - start_time
print(f"実行時間: {execution_time}秒")

このコードでは、time.monotonic()を使って開始時点と終了時点の時間を取得し、その差分からコードの実行にかかった時間を計測しています。

この例では1から10000までの数の和を計算することで、計測したい任意のコードを実行しています。

このコードを実行すると、「実行時間: (実行時間)秒」と表示されます。

ここで得られた実行時間は、実行したコードのパフォーマンスを評価するための指標となります。

○サンプルコード7:sleepを使う

Pythonのtimeモジュールには、特定の期間処理を一時停止するsleep関数もあります。

ただし、この関数は直接的な時間計測には使われませんが、一定時間の待機が必要な場合や、時間差を作り出すテストなどに便利です。

下記のコードでは、5秒間の一時停止を作成します。

import time

print('処理を開始します')
time.sleep(5)  # 5秒間処理を停止
print('処理を再開しました')

このコードでは、time.sleep(5)が使われて、プログラムの実行を5秒間一時停止します。

その結果、「処理を開始します」と表示した後、5秒間何も表示されず、その後に「処理を再開しました」と表示されます。

○サンプルコード8:thread_timeを使う

thread_time関数は、特定のスレッドのCPU時間を計測するために使用されます。

次のコードでは、thread_timeを使って実行時間を計測する方法を表します。

import time

start_time = time.thread_time()
# 実行したいコード
total = sum(range(10000))
end_time = time.thread_time()

execution_time = end_time - start_time
print(f"実行時間: {execution_time}秒")

このコードでは、time.thread_time()を使って開始時点と終了時点の時間を取得し、その差分からコードの実行にかかった時間を計測しています。

この例では1から10000までの数の和を計算することで、計測したい任意のコードを実行しています。

このコードを実行すると、「実行時間: (実行時間)秒」と表示されます。

得られた実行時間は、実行したコードのパフォーマンスを評価するための指標となります。

○サンプルコード9:perf_counter_nsを使う

perf_counter_ns関数は、perf_counterと同様に高精度な時間計測を提供しますが、結果はナノ秒(10億分の1秒)単位で提供されます。

次のコードでは、perf_counter_nsを使用して実行時間を計測する方法を紹介します。

import time

start_time = time.perf_counter_ns()
# 実行したいコード
total = sum(range(10000))
end_time = time.perf_counter_ns()

execution_time = end_time - start_time
print(f"実行時間: {execution_time}ナノ秒")

このコードでは、time.perf_counter_ns()を使って開始時点と終了時点の時間を取得し、その差分からコードの実行にかかった時間を計測しています。

この例では1から10000までの数の和を計算することで、計測したい任意のコードを実行しています。

このコードを実行すると、「実行時間: (実行時間)ナノ秒」と表示されます。

ここで得られた実行時間は、実行したコードのパフォーマンスを評価するための指標となります。

○サンプルコード10:process_time_nsを使う

process_time_ns関数は、プログラムがCPUによって処理される時間をナノ秒単位で計測します。

これは、perf_counter_nsとは異なり、CPU時間のみを計測します。

つまり、システムが他のタスクで忙しい場合や、入出力待ちなどでプログラムが停止している時間は含まれません。

下記のコードでは、この関数を使用して実行時間を計測します。

import time

start_time = time.process_time_ns()
# 実行したいコード
total = sum(range(10000))
end_time = time.process_time_ns()

execution_time = end_time - start_time
print(f"実行時間: {execution_time}ナノ秒")

このコードでは、time.process_time_ns()を使って開始時点と終了時点の時間を取得し、その差分からコードの実行にかかった時間を計測しています。

この例では1から10000までの数の和を計算することで、計測したい任意のコードを実行しています。

このコードを実行すると、「実行時間: (実行時間)ナノ秒」と表示されます。

ここで得られた実行時間は、実行したコードのパフォーマンスを評価するための指標となります。

ここまで、Pythonで時間を計測するためのさまざまな方法を紹介してきましたが、これらのどの方法を選択するかは、特定の問題や要件によります。

●時間計測方法の注意点と対処法

Pythonで時間計測を行う際にはいくつかの注意点があります。

①計測結果のばらつき

プログラムの実行時間は、システムの負荷やその他の要因によりばらつきが出ます。

そのため、より正確な結果を得るためには、複数回実行して平均値を計算することを推奨します。

import time

execution_times = []
for _ in range(10):
    start_time = time.perf_counter()
    # 実行したいコード
    total = sum(range(10000))
    end_time = time.perf_counter()

    execution_time = end_time - start_time
    execution_times.append(execution_time)

average_execution_time = sum(execution_times) / len(execution_times)
print(f"平均実行時間: {average_execution_time}秒")

このコードでは、指定したコードを10回実行し、その平均実行時間を計算しています。

これにより、一回の計測で得られる結果のばらつきを減らすことができます。

②プログラムの待機時間

特にウェブスクレイピングやAPIからのデータ取得など、待機時間が含まれる処理の場合、計測結果に大きな影響を及ぼす可能性があります。

そのような場合、実際の処理時間を計測するためには、待機時間を除外する必要があります。

具体的な方法は、計測したいコードの部分だけを計測することです。

●時間計測方法のカスタマイズ方法

Pythonの時間計測機能は高度にカスタマイズ可能で、独自のニーズに合わせて使用することができます。

ここでは、時間計測機能のカスタマイズ方法の一部を紹介します。

①計測範囲の制御

必要に応じて計測する範囲を制御することができます。

下記のコードでは、時間計測を行う範囲を指定し、その範囲内でのみ時間を計測しています。

import time

def calculate_sum(end_num):
    start_time = time.perf_counter()
    total = sum(range(end_num))
    end_time = time.perf_counter()

    execution_time = end_time - start_time
    print(f"実行時間: {execution_time}秒")

calculate_sum(10000)

このコードでは、計測範囲を制御するために関数を使用しています。

この関数calculate_sumでは、計算の開始と終了の間に時間計測を行い、その結果を表示しています。

このように、時間計測を行いたい範囲を関数内に配置することで、計測範囲を制御することができます。

②マルチスレッドやマルチプロセスの時間計測

Pythonのマルチスレッドやマルチプロセスを利用する場合、それぞれのスレッドやプロセスの実行時間を個別に計測することが可能です。

下記のコードは、マルチスレッドを利用し、それぞれのスレッドの実行時間を計測する例です。

import time
import threading

def calculate_sum(end_num):
    start_time = time.perf_counter()
    total = sum(range(end_num))
    end_time = time.perf_counter()

    execution_time = end_time - start_time
    print(f"スレッド {threading.current_thread().name} の実行時間: {execution_time}秒")

thread1 = threading.Thread(target=calculate_sum, args=(10000,))
thread2 = threading.Thread(target=calculate_sum, args=(20000,))

thread1.start()
thread2.start()

thread1.join()
thread2.join()

このコードでは、2つのスレッドを生成し、それぞれでcalculate_sum関数を実行しています。

この関数内で、それぞれのスレッドの実行時間を計測し、その結果を表示しています。

これにより、各スレッドの実行時間を個別に把握することが可能です。

以上のように、Pythonの時間計測機能を使えば、様々な場面での時間計測やカスタマイズが可能となります。

これでPythonでの時間計測法についての解説を終わります。

このガイドが、Pythonでの時間計測法を理解し、効率的なコード開発に役立てる手助けとなれば幸いです。

まとめ

この記事では、Pythonを使った時間計測方法を10通り紹介しました。

具体的なサンプルコードとその使い方、注意点、カスタマイズ方法を解説しました。

時間計測は、コードのパフォーマンス評価や最適化に非常に重要な要素です。

この記事を通じて、あなたのコード開発がよりスムーズで効率的になることを願っています。