【Python】時間計測をミリ秒単位で実装する方法

【Python】時間計測をミリ秒単位で実装する方法

公開: 更新:
CodeCampが提供するDX人材育成が可能なプログラミングやITが学べる公開講座



Pythonでミリ秒単位の時間計測方法

Pythonでミリ秒単位の時間計測を行うには、標準ライブラリの「time」モジュールと「datetime」モジュールが広く利用されています。timeモジュールの`time()`関数は浮動小数点数で秒数を返すため、これに1000を掛けることでミリ秒に変換することができます。この方法は特に処理時間の測定において高い精度を必要とする場合に適しています。

【サンプルコード】
import time

# 開始時間を記録
start_time = time.time()

# 計測したい処理
for i in range(1000000):
    pass

# 終了時間を記録
end_time = time.time()

# 経過時間をミリ秒で計算
elapsed_time_ms = (end_time - start_time) * 1000

print(f"処理時間: {elapsed_time_ms:.3f} ミリ秒")
【実行結果】
処理時間: 14.582 ミリ秒

time.timeモジュールはシステムの時計に依存するため、システムの時刻が変更された場合に不正確な結果となる可能性があります。より精度の高い計測が必要な場合は`time.perf_counter()`関数を使用することによって、システム時計の影響を受けない高精度な時間計測が可能となります。

特に短い処理時間を計測する場合、ミリ秒単位では粒度が荒いと感じることがあります。このような場合はマイクロ秒(100万分の1秒)やナノ秒(10億分の1秒)単位での計測も考慮すると良いでしょう。


Python研修一覧はこちら

目的に合うPython研修を一覧形式から探したい方は、ぜひご利用ください。

Python研修を比較する

Java研修一覧はこちら

目的に合うJava研修を一覧形式から探したい方は、ぜひご利用ください。

Java研修を比較する

PHP研修一覧はこちら

目的に合うPHP研修を一覧形式から探したい方は、ぜひご利用ください。

PHP研修を比較する

新入社員研修

目的に合う新入社員研修を一覧形式から探したい方は、ぜひご利用ください。

新入社員研修を比較する

全ての研修からも探したい方はこちら

Pythonのperf_counterによる高精度時間計測

Pythonで高精度な時間計測を行うには、`time.perf_counter()`関数が最適です。この関数はシステム時計の変更の影響を受けず、最も高い精度で経過時間を測定できるため、ベンチマークテストやパフォーマンス分析に適しています。また、スリープ状態や他のプロセスによる中断を含む実際の経過時間を測定することができます。

【サンプルコード】
import time

# 高精度な開始時間を記録
start_time = time.perf_counter()

# 計測したい処理
for i in range(1000000):
    pass

# 高精度な終了時間を記録
end_time = time.perf_counter()

# 経過時間をミリ秒で計算
elapsed_time_ms = (end_time - start_time) * 1000

print(f"処理時間: {elapsed_time_ms:.3f} ミリ秒")
【実行結果】
処理時間: 13.692 ミリ秒

`time.perf_counter()`は、Pythonのバージョン3.3以降で導入された関数であり、旧バージョンで使用されていた`time.clock()`関数の代替として推奨されています。この関数はオペレーティングシステムに依存しない一貫した結果を提供することによって、クロスプラットフォームでの時間計測の信頼性を向上させます。

複数回の計測を行い、その平均値を取ることで、より正確な処理時間を把握することができます。特にシステム負荷の変動による影響を軽減したい場合には、このアプローチが効果的です。

datetimeモジュールを使ったミリ秒時間計測

Pythonのdatetimeモジュールを使用すると、日付と時刻の差分からミリ秒単位の経過時間を計算できます。このモジュールは特に人間が読みやすい形式での時間表示や、日付を含む時間間隔の計測に適しています。datetimeオブジェクトの差分から得られるtimedeltaオブジェクトを使用することによって、秒単位やミリ秒単位での時間計測が可能になります。

【サンプルコード】
import datetime

# 開始時間を記録
start_time = datetime.datetime.now()

# 計測したい処理
for i in range(1000000):
    pass

# 終了時間を記録
end_time = datetime.datetime.now()

# 経過時間を計算
elapsed_time = end_time - start_time

# ミリ秒に変換
elapsed_ms = elapsed_time.total_seconds() * 1000

print(f"処理時間: {elapsed_ms:.3f} ミリ秒")
【実行結果】
処理時間: 14.955 ミリ秒

datetimeモジュールは、タイムゾーン情報を含む日時の取り扱いや、人間が読みやすい形式での時間表示に優れています。処理の開始時刻と終了時刻を記録し、後で分析する場合など、時刻情報自体も重要な場合にこのアプローチが役立ちます。

大量の時間計測を行う場合、datetimeオブジェクトの生成とtimedeltaの計算はtimeモジュールの関数を使用するよりもオーバーヘッドが大きくなることがあります。パフォーマンスクリティカルなアプリケーションでは、timeモジュールの方が適している場合があることを考慮してください。


Python基礎・実践(Django)

企業・法人向けのPython研修では、基礎から応用まで体系的に学べます。

Python研修の詳細

DX社員研修

企業・法人向けのDX研修では、実務に繋がるリスキリングでITレベルを向上させます。

DX研修の詳細

Javaエンジニア育成研修

企業・法人向けのJavaエンジニア育成研修では、Javaの基礎から応用まで確実に習得できます。

Java研修の詳細

新卒・新入社員向け研修

企業・法人に新入社員・新卒社員に向けたプログラミング研修を提供しています。

新入社員研修の詳細

コードキャンプのIT研修を全て見る

複数処理のミリ秒時間計測と比較方法

複数の処理時間を計測し比較する場合、一貫した方法でデータを収集・分析することが重要です。各処理の実行時間をミリ秒単位で計測し、リストやディクショナリに格納することによって、後からの比較や分析が容易になります。また、複数回の計測を行い平均値を取ることで、より信頼性の高い結果を得ることができます。

【サンプルコード】
import time
import statistics

def measure_time(func, iterations=5):
    """関数の実行時間をミリ秒単位で複数回計測し、統計情報を返す"""
    times = []
    
    for _ in range(iterations):
        start = time.perf_counter()
        func()
        end = time.perf_counter()
        times.append((end - start) * 1000)
    
    return {
        'mean': statistics.mean(times),
        'median': statistics.median(times),
        'stdev': statistics.stdev(times) if len(times) > 1 else 0,
        'min': min(times),
        'max': max(times)
    }

# 計測したい処理を関数として定義
def process_a():
    for i in range(1000000):
        pass

def process_b():
    result = 0
    for i in range(1000000):
        result += i

# 各処理の時間を計測
results_a = measure_time(process_a)
results_b = measure_time(process_b)

# 結果を表示
print(f"処理A: 平均 {results_a['mean']:.3f} ms, 中央値 {results_a['median']:.3f} ms")
print(f"処理B: 平均 {results_b['mean']:.3f} ms, 中央値 {results_b['median']:.3f} ms")
print(f"処理Bは処理Aの {results_b['mean']/results_a['mean']:.2f} 倍の時間がかかりました")
【実行結果】
処理A: 平均 12.755 ms, 中央値 12.689 ms
処理B: 平均 33.214 ms, 中央値 32.984 ms
処理Bは処理Aの 2.60 倍の時間がかかりました

複数の処理を比較する際には、単に平均値だけでなく中央値や標準偏差も確認することが重要です。これらの統計値を活用することによって、処理時間のばらつきや外れ値の影響を適切に評価できます。特に実行環境の負荷状況によって処理時間が変動する場合、このような複数の指標を参照することが有効です。

大規模なパフォーマンス分析では、測定結果をグラフ化することも効果的です。Pythonの`matplotlib`や`seaborn`などのライブラリを使用することによって、処理時間の分布やトレンドを視覚的に把握しやすくなります。

※上記コンテンツの内容やソースコードはAIで確認・デバッグしておりますが、間違いやエラー、脆弱性などがある場合は、コメントよりご報告いただけますと幸いです。

ITやプログラミングに関するコラム


ITやプログラミングに関するニュース

ブログに戻る

コメントを残す

コメントは公開前に承認される必要があることにご注意ください。

企業・法人向けのIT・プログラミング・生成AI研修を探す、比較する - IT・プログラミングを知って学べるコネクトメディア CodeCampが提供するDX人材育成が可能なプログラミングやITが学べる公開講座 - IT・プログラミングを知って学べるコネクトメディア コードキャンプが提供する無料で学べるプログラミングスクール講座 - IT・プログラミングを知って学べるコネクトメディア コードキャンプDX人材育成研修 - IT・プログラミングを知って学べるコネクトメディア 3.5日の研修で、年間1,600時間の削減効果が見込まれる。東京きらぼしフィナンシャルグループのDX人材育成事例 - IT・プログラミングを知って学べるコネクトメディア 配属3ヶ月で30%の生産性向上を実現するいよぎんコンピュータサービスの新人研修に迫る - IT・プログラミングを知って学べるコネクトメディア 金融業界の業務効率化を加速するニッセイアセットマネジメントの生成AI×GAS活用研修事例 - IT・プログラミングを知って学べるコネクトメディア 【製造業のDX人材育成事例】デジタル人材の即戦力化を実現する、日本ガイシ株式会社の異動者向オンボーディング研修 - ITやプログラミングを知って学べるコネクトメディア フューチャーアーキテクト株式会社が実現した新入社員向けIT研修プログラムでタスクフォース制度が主体的な学びと成長を生み出す - IT・プログラミングを知って学べるコネクトメディア コードキャンプDX人材育成研修 - IT・プログラミングを知って学べるコネクトメディア コードキャンプIT・プログラミング研修事例/【IT新入社員研修】オンラインとオフラインの最適バランスを実現したFutureOneの導入事例 - IT・プログラミングを知って学べるコネクトメディア コードキャンプIT・プログラミング研修事例/【新入社員研修】柔軟なハイブリッド型Java研修で実現した新卒20名の成長と成果|サークレイス株式会社 - ITやプログラミングを知って学べるコネクトメディア コードキャンプIT・プログラミング研修事例/現場により近いところにデジタルを根付かせるDX基礎講座研修|株式会社ブリヂストン - ITやプログラミングを知って学べるコネクトメディア コードキャンプIT・プログラミング研修事例/業務の効率化・DX推進に向けたIT人材育成への第一歩|株式会社カナエ - ITやプログラミングを知って学べるコネクトメディア 企業・法人向けのIT・プログラミング研修 - ITやプログラミングを知って学べるコネクトメディア

新着記事

対象者別で探す

子供(小学生・中学生・高校生)向け
プログラミング教室検索する

子供(小学生・中学生・高校生)がロボットやプログラミング言語を学ぶことができるオフラインからオンラインスクールを検索、比較することが可能です。

子供(小学生・中学生・高校生)
プログラミング教室検索する

ITやプログラムなどの
最新情報を検索する

日々、新しいITやプログラミング言語の情報が流れていきますが、特定の情報を時系列でニュースやコラムを確認することができます。

ITやプログラムなどの
最新情報を検索する