[Python] プログラムを一定時間停止させる(time.sleep)

time.sleep()関数は、任意の時間プログラムを止めておくことができます。

  • 1秒おきに文字列を表示させたい!
  • ある時刻になったら次の処理が動き出すようにしたい!

うまく工夫するとこんな場合にも使うことができます。
本記事ではこの関数の使い方について具体例を交えながらまとめます。
# 2019/6/30 記事更新

確認した環境

  • OS:Ubuntu16.04LTS
  • Python 3.7.2

ある一定時間プログラムを止める

time.sleep()関数を使います。引数に設定した時間(秒)の間、プログラムが停止します。

以下の例は、0から4の数値を1秒おきに表示するコード例です。time.sleep()関数を使って、1秒間プログラムを停止させています。
また、本当に1秒間停止しているかどうかを確認するために、time.time()関数も挿入しています。

>>> import time

>>> for i in range(5):
...     print(i)
...     t0 = time.time()   # sleep開始時刻
...     time.sleep(1)      # 1秒停止
...     t1 = time.time()   # sleep終了時刻
...     print(t1 - t0)     # sleep時間を計算して出力
... 
0
1.0011358261108398
1
1.001131534576416
2
1.001129388809204
3
1.0011320114135742
4
1.0011367797851562

出力結果を見ると、設定通りほぼ1秒間停止していることがわかります。

ちなみに、sleep中に例外(ctl+CによるKeyboardInterrupt等)が送出された場合はsleepが中断します
例えば、以下は10秒間のプログラム停止中にCtl + Cが押下された場合に、sleepが中断されてメッセージ(この場合は”Interrupt”)を表示してプログラムが終了するコード例です。最後に経過時間を表示させています。

import time

def time_irq():
    print('start')
    t0 = time.time()
    
    try:
        time.sleep(10)
    except KeyboardInterrupt: ★Ctl+C押下による例外処理
        print('Interrupt')
    
    t1 = time.time()
    print('end: {}'.format(t1-t0))

実行結果を下記に示します。sleep中に発生した例外によりsleep処理が中断されています。

start
Interrupt
end: 4.13718581199646

特定の日時までプログラムを一時停止する

time.sleep()関数を使って、ある時刻になったらプログラムを動かす(=ある時刻までプログラムを止めておく)こともできます。

以下にコード例を示します。★部で設定した時刻になるとメッセージとその時刻を表示する単純な例です。

import time, datetime

tt = datetime.datetime(2018, 11, 4, 19, 22, 00) ★プログラム開始時刻の設定
while datetime.datetime.now() < tt: ★★現在時刻とプログラム開始時刻より前の場合、プログラム停止
    time.sleep(1)
print('Time UP')
print(datetime.datetime.now())

実行結果を以下に示します。想定通りに動作していることがわかります。

Time UP
2018-11-04 19:22:00.313607

尚、上記コードの★★部にて、datetimeオブジェクトを使って日時を表したり、日付の演算をしたりしています。

datetimeモジュールの使い方についてはこちらの記事でもまとめていますので、ご参照ください。
[Python] 日付と時刻の表し方と演算(datetimeモジュール)

まとめ

time.sleep()関数を使って、プログラムを一定時間停止する方法についてまとめました。この関数をうまく使えば、ある時刻までプログラムを停止したり、定期的にプログラムが動作するようにしたり、いろいろ出来そうです。
ただ、、、Linuxのcronを使ったほうがプログラムがシンプルになる場合もあると思いますので、効率よく使い分けていきたいです。

Learn more...

書籍でもう少し詳しく学びたい場合はこちらもどうぞ。筆者もかなり参考にさせてもらっています!

[Sponsor link]