時刻したい(time

 1import time
 2
 3# Get unixtime (since epoch 1970-01-01)
 4ut = time.time()
 5
 6# Convert to unixtime to local time (struct_time)
 7now = time.localtime(ut)
 8
 9# Convert struct_time to string
10timestamp = time.strftime("%Y-%m-%d %H:%M:%S", now)

timeモジュールは、時間を操作できる標準ライブラリです。 time.sleepで処理を一時停止する場合に使います。

注釈

日付を操作したい場合は、 datetimependulum、 が適しています。

一時停止したい(time.sleep

1# sleep for 0.5 seconds
2time.sleep(0.5)

time.sleepで一時停止できます。 時間は秒で指定します。

経過時間したい(time.monotonic / time.monotonic_ns

 1# Get start time position
 2started = time.monotonic()
 3
 4# Run main process
 5for i in range(100):
 6    # something to do
 7    time.sleep(0.1)  # simulate worklaod
 8
 9# Get stopped time position
10stopped = time.monotonic()
11elapsed = stopped - started

time.monotonicは、単調増加する時間カウンターです。 絶対に後戻りすることがないため、経過時間の計測に適しています。

注釈

time.timeで取得できる時刻情報は、パソコンのシステム時刻に依存します。 NTP同期や手動で時計が変更された場合、時刻が前後にずれることがあります。 このような場合、end - startで計算した経過時間が負の値になる可能性があります。

一方で、time.monotonicは、絶対に後戻りしない時間カウンターです。 単一の値に意味はなく「時間差(経過時間)」にのみ意味があります。 システム時刻の変更の影響を受けないため、経過時間が負になることはありません。

プロセスの経過時間やタイムアウト計測にはtime.monotonicを使うべきです。

 1timeout = 5
 2interval = 0.01
 3deadline = time.monotonic() + timeout
 4
 5while True:
 6    now = time.monotonic()
 7
 8    if now >= deadline:
 9        print("timeout")
10        # handle timeout (break / raise / retry)
11        break
12
13    # something todo
14
15    # avoid busy loop (reduce CPU usage)
16    # sleep up to interval, but not beyond the deadline
17    remaining = deadline - now
18    time.sleep(min(interval, remaining))

タイムアウト処理やリトライ処理に利用できます。 ループ処理の直前で〆切時刻(deadline)を設定し、 ループ内で現在時刻と比較することで、タイムアウトを判定します。

注釈

上記サンプルでは、〆切直前にスリープ時間を調整する処理を追加し、 タイムアウト検知の遅延を抑えています。 スリープ時間(interval)が長いほど、タイムアウト検知が遅れるので、 この調整は重要です。

高精度で計測したい(time.perf_counter

 1# Get started time position
 2started = time.perf_counter()
 3
 4# Run main process
 5for i in range(10000000000):
 6    pass
 7
 8# Get stopped time position
 9stopped = time.perf_counter()
10elapsed = stopped - started

time.perf_counterで精度が高い時刻を取得できます。