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

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

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

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

Pythonのsleep関数とは

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関数を使うことができます。

処理の実行に猶予時間を付けられる

「処理Aを実行した数秒後に処理Bを実行する」など、処理に猶予時間を付けたい場合にもsleep関数が使えます。

例えば、時間がかかる処理の実行する際、処理中にアクセスすると正しく読み込めずエラーになることがあります。これを回避するために、処理実行を一度停止して何秒後に実行するといった猶予時間の付与が有用です。

Pythonでのsleep関数の書き方

ここからは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関数記述例

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関数の精度

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

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

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

まとめ

今回はPythonで処理を待機させたいために、sleep関数を紹介しました。

sleep関数は便利な関数な一方で、多数のスレッドを使用する場合、sleep関数はスレッドごとに独立して動作するため、パフォーマンスへの影響も考慮する必要があります。
基本的な使い方をマスターした後は、パフォーマンスへの影響も考慮していきましょう。

TECH PLAYでは、ITに関わる様々なイベント・勉強会・講演会・交流会・カンファレンス・セミナーなどの情報を集約し掲載しています。

テクノロジーと共に成長しよう、
活躍しよう。

TECH PLAYに登録すると、
スキルアップやキャリアアップのための
情報がもっと簡単に見つけられます。

面白そうなイベントを見つけたら
積極的に参加してみましょう。
ログインはこちら

タグからイベントをさがす