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の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モジュールの方が適している場合があることを考慮してください。
複数処理のミリ秒時間計測と比較方法
複数の処理時間を計測し比較する場合、一貫した方法でデータを収集・分析することが重要です。各処理の実行時間をミリ秒単位で計測し、リストやディクショナリに格納することによって、後からの比較や分析が容易になります。また、複数回の計測を行い平均値を取ることで、より信頼性の高い結果を得ることができます。
【サンプルコード】
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やプログラミングに関するコラム
Gitでブランチ(branch)を作成する方法
crontabの書き方
PDFをExcelに変換する方法
Excelでプルダウンを設定する方法
エクセルでページ区切りを設定する方法
Markdownの取り消し線の書き方
ラズベリーパイでできること9選
Gitでbranch(ブランチ)を削除する方法をローカル・リモート別に解説
git addの取り消し方法を状況別に解説
CSSのstickyプロパティでWebサイトに固定要素を実装する方法
ITやプログラミングに関するニュース
アイアール技術者教育研究所がエクセルギー解析計算ウェビナーを開催、省エネと環境負荷低減に貢献
フラー株式会社がアプリ市場トレンド解説ウェビナーを3月25日に開催、成長アプリの共通項とデータ活用を解説
株式会社BOTANICOが2026年版X運用最新戦略ウェビナーを開催、成果につなげる資産型運用を解説
AIストーム株式会社がOpenClaw活用セミナーを開催、AIエージェントがビジネス現場を変革
株式会社オロが建設コンサルティング業向けウェビナーを開催、技術部門の損益可視化を支援
アルティウスリンク株式会社が経理向けBPO活用ウェビナーを開催、課題解決と業務効率化を支援
株式会社日本計画研究所がAI時代のインフラセミナー開催、GPUとデータセンターの課題を解説
株式会社カウンターワークスがリーシング業務AI活用ウェビナー開催、既存ツールでAIエージェント実践
株式会社セキドがDJI産業機セミナーを福井で開催、3Dデータ活用と機材選定を無料解説
株式会社ナビットが補助金活用ウェビナーを開催、販促費削減と集客力向上を解説
