Pythonのsleepは、処理を一時停止
Pythonのsleepのサンプルコード
Pythonのsleep関数は、指定した秒数の間プログラムを停止する関数です。以下のようなケースで使うと便利。
- プログラムを一定時間停止させたい場面
- インターネットから何らかのデータを取得し、取得後に何らかの処理を行いたい場面
- 一定のインターバルで処理を行いたい場面
引数として、秒数(int型)を指定します。引数を指定しない場合は、デフォルトで0が指定されます。指定した秒数だけプログラムを停止した後、プログラムは再開されます。
また、sleep関数では小数点以下の秒数も指定できます。その場合は、浮動小数点数(float型)を指定する必要があります。
import time for i in range(5): print("sleep開始:", i) time.sleep(1) print("sleep終了:", i)
実行するとこうなります。
sleep開始: 0 sleep終了: 0 sleep開始: 1 sleep終了: 1 sleep開始: 2 sleep終了: 2 sleep開始: 3 sleep終了: 3 sleep開始: 4 sleep終了: 4
pythonのsleepで指定時刻まで処理を停止する
現在時刻と指定の時刻の差分を取得して、その間sleepを実行することで、指定時刻まで処理を停止することができます。
import time # 指定時刻まで処理を停止する stop_time = "2020/08/15 12:00:00" # 現在時刻を取得 now = time.time() # 指定時刻を取得 stop_time_ms = time.mktime(time.strptime(stop_time, "%Y/%m/%d %H:%M:%S")) # 現在時刻と指定時刻の差分を取得 delta_time = stop_time_ms - now # 差分が正の場合、処理を停止 if delta_time > 0: time.sleep(delta_time)
上記の例では、例えば 2020/08/15 11:59:00現在の状態で実行した場合、60秒間処理が停止します。
pythonのsleepでスレッド処理のタイミング制御
Pythonのsleep関数を使うことで、スレッド間の処理をタイミング制御することができます。スレッドとはプログラム内で実行されているサブプロセスのことで、一つのプログラム内で複数のプロセスを実行することが可能になります。
sleep関数を使用すると、あるスレッドが実行中であっても、それ以外のスレッドが実行されないように1つのスレッドの実行時間を指定して、スレッド間の処理をタイミング制御することができます。 これにより、ある処理が完了するまで他の処理を開始しないようにするなどの効果が得られます。
以下のコードを実行すると、2つのスレッドの終了を待って、指定したメッセージを表示します。
import threading import time # スレッド1の処理 def thread1_action(): print("thread1 start") time.sleep(1) # 1秒スリープ print("thread1 end") # スレッド2の処理 def thread2_action(): print("thread2 start") time.sleep(3) # 3秒スリープ print("thread2 end") # スレッド1の生成と実行 thread1 = threading.Thread(target=thread1_action) thread1.start() # スレッド2の生成と実行 thread2 = threading.Thread(target=thread2_action) thread2.start() # スレッド1, スレッド2の完了を待つ thread1.join() thread2.join() # 全てのスレッドが完了したら実行される print("all thread finished")
Pythonのthreadingモジュールのjoin関数は、スレッドをブロックして、指定されたスレッドが終了するまで待機する関数です。スレッドが終了したら、関数が終了します。スレッドの開始前にjoinを使用すると、スレッドが終了するまで開始しません。スレッドが終了した後にjoinを使用すると、スレッドが完全に終了したかどうかの確認が行えます。
実行するとこうなります。
thread1 start thread2 start thread1 end thread2 end all thread finished
Pythonのsleepのまとめ
- sleep関数はpythonプログラムの処理を一時停止させることができる。
- sleep関数の引数には秒単位で指定した時間を渡す必要がある。
- sleep関数はスレッド処理などのタイミング制御にも利用できる。