【Python】sleep関数の使い方と利用場面を解説

プログラミング
Pythonの関数のひとつであるsleep関数を使うことで処理を一時停止させることができます。そんなsleep関数はどのような場面で使うのかといった概要と実際のコードの書き方を、Pythonの初心者でもわかりやすいようにコード例とともに解説していきます。
【Python】sleep関数の使い方と利用場面を解説

Pythonにはsleep関数という関数が用意されています。
睡眠という名のとおり、sleep関数を使うことで処理を睡眠、つまり待機状態にすることが可能です。

今回はsleep関数をどんな場面で使うのか、コードはどのように書くのか、といった内容を実際のコード例とともにPythonの初心者にもわかりやすいように解説しているのでぜひご覧ください。

Pythonのsleep関数とは

1

Pythonのsleep関数はtimeモジュールに含まれている関数の一つで、sleep関数を使うことで、処理を待機状態、つまり一旦停止することができます。

これを利用することで、

  • 指定した時間に処理を実行する
  • 一定の間隔で処理を実行する

といった処理を実装することができます。

指定した時間に処理を実行できる

「2020年の1月1日にある処理を実行する」など、指定した時間に処理を実行したいときにはsleep関数が使えます。
以下のコードは「3000年の1月1日に”Hello Millennium”と表示する」処理をおこなうコードです。

import time
from datetime import datetime

start_time = datetime.strptime("3000/01/01 00:00", '%Y/%m/%d %H:%M')
time_second = (start_time - datetime.now()).seconds
time.sleep(time_second)
print("Hello Millennium")

このコードは実行後に、変数「start_time」に代入した日時から現在時刻を引いた秒数処理を待機させることで3000年の1月1日に”Hello Millennium”と表示されるようになっています。

sleep関数についての詳しい解説は後述します。

一定の間隔で処理を実行できる

数秒ごとや数ミリ秒ごとといった一定の間隔で処理を実行する際にもsleep関数は役に立ちます。

sleep関数を使い一定の間隔で停止しながら処理をおこなうメリットには、CPUの処理量が膨大になってしまう際の負担を減らせることなどがあります。これはリクエストを短時間で大量におこなう場合にも有用です。

例えば、Webページのスクレイピング(Webページから自動的に情報収集する方法)する際にsleep関数を使用することがあります。Webページに短時間で何度もアクセスするとDos攻撃だと認識されて問題になる可能性があるので、そういった場合にはsleep関数を使い一定の間隔で処理をストップさせ回避します。

他にも、例えば毎週月曜日に何らかの処理を実行させたいときなどにもsleep関数を使うことができます。

Pythonでのsleep関数の書き方

2

ここからはPythonでのsleep関数の書き方について、以下のsleep関数を使った簡単なコードを参考に解説していきます。

import time

print("Hello")
time.sleep(3)
print("sleep")

このコードを実行すると、「Hello」と表示されてから3秒後に「sleep」と表示されます。 それでは1行目から解説していきます。

import time

まず、sleep関数を使用するための準備です。
sleep関数はtimeモジュールに含まれている関数なので、timeモジュールをインポートすることで使用することができます。

print("Hello")

「Hello」を出力。

time.sleep(3)

ここでsleep関数が登場しています。

では、sleep関数の使い方を紹介します。

sleep関数は引数に秒数を受け取ります。そして受け取った秒数分処理を停止させるといった働きをします。 引数はint型でもfloat型でも構いません。また、「0.1」といったミリ秒を受け取ることもできます。もちろんマイナスの値を受け取ることはできません。
このコードでは「3」を受け取っているため、3秒処理がストップします。

print("sleep")

そしてsleep関数が実行されて3秒後に「sleep」が表示され処理は終了です。

Pythonのsleep関数記述例

3

sleep関数の使い方をいくつか紹介します。

sleep関数をミリ秒(ミリセック)で使う

先ほど紹介したように、sleep関数は引数にミリ秒(1/1000秒)を受け取ることができます。
使い方は簡単で、以下のコードのように引数にミリ秒を指定するだけです。

print("Hello")
time.sleep(0.001)
print("sleep")

sleep関数をfor文で使う

sleep関数はfor文などのループ処理の中に記述することもできます。
これを利用して、定期的に処理を繰り返す処理の実装が可能です。

以下のコードは1秒ごとにループ回数を表示するコードです。

import time

for i in range(1,5):

    print(i)
    time.sleep(1)

このコードを実行すると、1、2、3、4と合計4個の数字が1秒ごとに表示されます。

sleep関数を使用していない場合は1秒ごとではなく一瞬で4個の数字が表示されます。 for文の最後に「time.sleep(1)」というようにsleep関数が書かれていることによって、ループごとに処理が1秒停止されるのです。

Pythonのsleep関数の精度

4

最後にsleep関数の精度について解説していきます。

ループ内でsleep関数を使うことで一定間隔で処理をおこなうことができますが、正確には完全に一定間隔にはなりません。
これは、実際の実行間隔には、sleep関数で設定した待機時間に加えて、sleep関数の呼び出しにかかる時間とループ内のその他の処理(ループ回数の出力など)の実行時間が存在するからです。

つまり、sleep関数の呼び出し時間とその他の処理の実行時間分の誤差が発生します。 数ミリ秒の誤差が影響のない処理であれば問題ありませんが、ロボットの制御など正確に一定間隔で処理をおこないたい場合にはsignalモジュールを使用するなどの工夫が必要です。

まとめ

Pythonで処理を待機させたいときにはsleep関数を使えばいいということがわかったかと思います。 Webページスクレイピングや定期的な処理の実行などを実装したいときにはぜひsleep関数を使って見てください。


この記事のキーワードに関する勉強会・イベントを探す

TECH PLAYでは、ITエンジニア向けの勉強会・イベント情報を提供しています。
興味のある方はぜひご参加ください。


おすすめのコラム