time.sleep()関数は、任意の時間プログラムの処理を止めておくことができます。例えば次のような場合に使うことが出来ます。
- 1秒おきに文字列を表示させたい
- ある時刻になったら次の処理が動き出すようにしたい
本記事ではこの関数の使い方について具体例を交えながらまとめます。
ある一定時間プログラムの処理を止める
time.sleep()を使います。引数に設定した時間(秒)の間、プログラムが停止します。
以下の例は、0から4の整数値を1秒おきに表示するコード例です。
ここでは、time.sleep()関数を使って1秒間プログラムを停止しています。
import time
# 本当に1秒間停止しているかどうかを確認するために、time.time()関数を挿入
for i in range(5):
print(i)
t0 = time.time()
time.sleep(1) # 1秒停止
t1 = time.time()
print(t1 - t0)
出力結果
0
1.0011742115020752
1
1.0011422634124756
2
1.0011181831359863
3
1.0012118816375732
4
1.0011391639709473
結果を見ると、設定通りほぼ1秒間停止していることがわかります。
sleep中に例外が発生した場合はどうなる?
ちなみに、sleep中に例外(ctl+CによるKeyboardInterrupt等)が送出された場合はsleepが中断します。
例えば、以下は10秒間のプログラム停止中にCtl + Cが押下されると、sleepが中断されてメッセージ(この場合は”Interrupt”)を表示するコード例です。
import time
print('start')
t0 = time.time()
try:
time.sleep(10)
except KeyboardInterrupt: # Ctl+C押下による例外処理
print('\nInterrupt')
t1 = time.time()
print('end: {}'.format(t1-t0))
実行結果を下記に示します。sleep中に発生した例外によりsleep処理が中断されています。
start
^C
Interrupt
end: 4.560115814208984
使用例)特定の時刻までプログラムを一時停止する
ある時刻になったらプログラムを動かす(=ある時刻までプログラムを止めておく)こともできます。
以下にコード例を示します。
import time, datetime
# 時刻を設定
tt = datetime.datetime(2021, 2, 15, 19, 8, 00)
# 1秒おきに時刻をチェック
while datetime.datetime.now() < tt:
time.sleep(1)
# 時刻になったらメッセージを表示
print(f'Time UP:{datetime.datetime.now()}')
実行結果を以下に示します。想定通りに動作していることがわかります。
Time UP:2021-02-15 19:08:00.842204
datetimeモジュールについてはこちらの記事でもまとめています。ご参照ください。
[Python] 日付と時刻の表し方と演算(datetimeモジュール)
[Python] 日付と時刻の表し方と演算(datetimeモジュール)
確認した環境
- OS:Ubuntu20.04LTS
- Python 3.9.1
まとめ
time.sleep()関数を使って、プログラムを一定時間停止する方法についてまとめました。
この関数をうまく使えば、ある時刻までプログラムを停止したり、定期的にプログラムが動作するようにしたり、いろいろ出来そうです。