Python
2022.02.25
Pythonのsleep関数で処理を一時停止!使い方や利用シーンを解説
2023.11.18

Pythonのsleepとはどのように使うのでしょうか。この記事ではPythonでのsleepの使用方法、使用例などを紹介していきます。


1.Pythonのsleep関数とは?

Pythonにはsleepという関数があります。sleep関数はtimeモジュールに含まれている関数のひとつです。”睡眠”を意味するsleepからとっているように、処理を一時的に停止できます。


また、sleep関数を利用することで「一定の間隔を開けて処理する」ことも可能です。

2.sleep関数を使うと便利なシーン


ここからは実際の利用例を紹介します。

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

本来であれば、処理は一瞬ですべて実行されますが、sleep関数を使うことで各処理の間に一定の間隔を挟めます。タイマーのように1秒に一度処理を挟みたい場合などに利用できます。

指定した時刻に処理を開始する

sleep関数を利用することで指定した時刻に処理を開始できます。特定の時刻から処理を実行したい時報などに利用できます。

猶予時間を経て処理を実行する

sleep関数を利用する場合、一番使う用途はこちらではないでしょうか。


読み込みに時間がかかる処理を実行した際、読み込み完了前にアクセスすると正しく読み込めずエラーになる場合があります。読み込み完了までの時間の猶予を生むために利用できます。




3.sleep関数の使い方


ここからは実際のソースコードの書き方を紹介していきます。

基本構文

はじめに基本構文です。

import time

print("処理を開始")
time.sleep(1)
print("1秒経過しました。")
# 処理を開始
# 1秒経過しました。

time.sleepの引数に1を与えて1秒処理を待機させています。このように引数に与えた秒数だけ処理を待機させることが可能です。


time.sleepの引数はミリ秒を受け取れます。そのため以下のコードのようにミリ秒を指定できます。

import time

print("処理を開始")
time.sleep(0.001)
print("1ミリ秒(1/1000秒)秒経過しました。")
# 処理を開始
# 1ミリ秒(1/1000秒)秒経過しました。

一定の間隔で処理を繰り返し実行する

さっそく例を見ていきましょう。

import time

for i in range(100):
    print(f"{i}秒経過")
    time.sleep(1)

# 0秒経過
# 1秒経過
# 2秒経過
# ...
# 98秒経過
# 99秒経過

time.sleepの引数に1を与えて実行した例になります。ご覧のように1秒に1行ずつ出力されます。このように、一定の時間一時停止しながら処理を実行することが可能です。

指定した時刻に処理を実行する

実際のソースコードを見ていきましょう。

import time
from datetime import datetime

t = datetime.strptime("2022/01/26 21:30", '%Y/%m/%d %H:%M')
t2 = (t - datetime.now()).seconds
print("処理開始")

time.sleep(t2)
print("Hello sleep")
# 処理開始
# Hello sleep

この例では、実行時刻をtに設定(例では2022/1/26 21:30)し、設定した時刻になったら”Hello sleep”と表示します。


tに指定時刻、t2に指定時刻と現在時刻の差分の秒数を代入し、t2の時間だけ待機することで実現しています。このようにtime.sleepを利用することで、指定の時刻に処理を開始することが可能です。

処理に猶予を生む

実際のソースコードを見ながら確認してみましょう。

今回はPythonを実務で利用する際によく使われるseleniumの例を紹介します。


※以下サンプルコードは一部のみを抜粋したものです。あくまでも参考として紹介しますのでご了承ください。

from selenium import webdriver
import time
# 省略

#検証用仮想ブラウザの作成
driver = webdriver.Chrome('chromedriver',options=options)

# URLに移動
url = "https://www.google.com/"
driver.get(url)

# ページを表示する猶予を設定
time.sleep(2)

# 要素を検索
driver.find_element_by_name("q")

#省略

この例では、要素を検索する前にtime.sleepを挟み2秒待機しています。これにより、ウェブページを完全に読み込む前に要素の検索(今回は検索窓)を開始してしまうのを防いでいます。


このように読み込み中に次の処理に進むのを防ぐ際にも、time.sleepを利用できるのです。



4.sleep関数に関する疑問点

ここからはsleep関数に関する疑問点について解説していきます。

①sleep関数の精度は?

sleep関数はOSタイマーの精度に左右されます。sleep関数をはじめとした時間に関係する処理を行う場合、OSタイマーを利用します。このOSタイマーの精度が悪いと正確な時間を計測できません。


sleep関数の場合、精度が悪い状態で引数に1ミリ秒など小さい値を代入すると、想定より長い時間停止してしまいます。Windowsの場合15.625ミリ秒より短い値で停止させる場合は注意が必要です。

②sleep関数中に例外が発生するとどうなる?

sleep関数の実行中に例外処理が行われるとsleep関数は中断されます。

適切な時間待機させたい場合は注意が必要です。




この記事をシェア