この記事では、Pythonで任意の秒数だけ処理を一時停止する方法を解説します。
一時停止を行うことで処理のタイミングを合わせたり、高速で実行してしまう処理を任意の速度に調整して負荷を低減させたりできます。
それでは、処理を一時停止する方法を見ていきましょう!
処理を任意の秒数だけ停止させる
一時停止を行うにはtime
モジュールのsleep()
関数を使います。
構文
import time
time.sleep(secs)
引数
secs | 一時停止する秒数。intやfloatで指定できる。 |
---|
戻り値
None
解説
引数で指定された秒数だけ呼び出し元のスレッドの実行を一時停止する。
例としてsleep()
関数を使って一時停止を行い、実行時間を計ってみます。実行時間を計る関数は以下の記事で紹介しています。
Link任意の処理の実行時間を測る方法
import time
# 時間を計る関数 ####################################
def start():
global start_time
start_time = time.perf_counter()
def end(tag="経過時間"):
if "start_time" in globals():
print("{}: {:.9f} [sec]".format(tag, time.perf_counter() - start_time))
else:
print("start関数が呼ばれていない")
####################################################
start()
# 0.5秒だけ一時停止
time.sleep(0.5)
end()
実行結果
経過時間: 0.500062500 [sec]
実行すると一時停止していた秒数にめちゃくちゃ近い値が出力されました。このようにtime.sleep()
関数はかなり正確に指定された秒数だけスレッドを一時停止させることができます。
処理速度を調整する
sleep()
関数を使うことで処理が実行される速度を調整することができます。
例えば、自分の周りのオブジェクトを調べて敵を察知するレーダーをwhile
文を使った無限ループで走らせるとします。以下のようなコードです。
# 無限ループ
while True:
# 敵をサーチする関数
search_enemy()
上記コードを実行すると高速にループ処理が行われ、とても大きな負荷がかかってしまいます。敵をサーチする処理はそこまで高速にループ処理しなくても問題なく機能します。
なので、以下のコードのようにsleep()
関数を使ってループ処理ごとに0.2秒待機させることで処理速度を調整し、負荷をかなり低減させることができます。
import time
# 無限ループ
while True:
# 敵をサーチする関数
search_enemy()
# 0.2秒停止
time.sleep(0.2)
sleep()
関数を使うことでループ処理のループ速度を調整することができました。
まとめ
この記事では、sleep()
関数を使って処理を一時停止する方法を解説しました。
かなり正確に処理を一時停止してくれるsleep()
関数ですが、どうやら「システム内の他の活動のスケジューリングのため、一時停止時間は要求された時間よりも任意に長くなる可能性がある」ようなので必ずしも正確、というわけにはいかないようです。
それでは今回の内容はここまでです。ではまたどこかで〜( ・∀・)ノ