Python

Pythonのsleep( )関数を使ってウエイトをかけて処理を待機させる方法

By 2021年9月5日No Comments

この記事では、Pythonのsleep( )関数を使って処理を待機する方法について解説していきます。

Pythonのsleep( )関数はtimeモジュールに含まれている関数の一つで実行処理にウエイトをかけて待機させることができます。sleep( )関数の引数で秒単位で待機する時間を指定します。

まずはtimeモジュールをimportします。

import time 

timeモジュールについて解説している記事はこちらになります。

Pythonのsleep( )関数を使って処理ごとにウエイトをかけ5秒待機させる

time.sleep( )の引数に数字を入れることで指定した秒数の処理にウエイトをかけ待機させることができます。今回は5秒のウエイトをかけて処理を待機させていきます。

import time

print("Hello")
time.sleep(5)
print("world!!")

出力結果:

Hello
world!!

上記のコードを実行すると、「Hello」と出力されてから5秒待ってから「world!!」と表示されたのが分かります。

指定する数字はfloat型である少数を指定する事もできます。

import time

print("Hello")
time.sleep(0.5)
print("world!!")

出力結果:

Hello
world!!

timeモジュールをインポートする際に

from time import sleep

と指定すると、下記のようにsleep( )のみで使う事ができます。

from time import sleep

print("Hello")
sleep(5)
print("world!!")

出力結果:

Hello
world!!

sleep( )関数をfor文などのループ処理の中に記述することもできます。forループ内でsleep( )関数を使うことで一定間隔で処理をおこなうことができます。

import time

for a in range(6):
    print(a)
    time.sleep(5)

出力結果:

0
1
2
3
4
5

sleep( )関数を使用していない場合は5秒ごとではなく、すぐに1から5の数字が表示されますが for文の処理中にsleep( )関数の引数に5を指定することにより1つの処理を終えるごとに5秒待ってから出力されたのが分かります。

Pythonのsleep( )関数にdatetimeモジュールを使ってウエイト時間を計測する

Pythonのライブラリであるdatetimeモジュールを使うとsleep( )関数のウエイト時間がしっかり機能しているか確認する事ができます。

datetimeモジュールについて解説している記事はこちらになります。

まずは、datetimeモジュールをインポートします。

from datetime import datetime

そして、下記のようにdatetimeモジュールの関数を使った処理を記述していきます。

import time
from datetime import datetime

print(datetime.now().strftime("%H:%M:%S"))
time.sleep(5)
print(datetime.now().strftime("%H:%M:%S"))

出力結果:

11:28:53
11:28:58

このようにしっかりsleep( )関数で5秒間のウエイトがかかっている事が確認できています。先ほどのforループ内の処理もウエイトがかかっているか計測します。

import time
from datetime import datetime
for a in range(6):
    print(a)
    time.sleep(5)
    print(datetime.now().strftime("%H:%M:%S"))

出力結果:

0
11:52:18
1
11:52:23
2
11:52:28
3
11:52:33
4
11:52:38
5
11:52:43

しっかりとforループ内の1つの処理を終えると5秒待機されてるのがdatetimeモジュールを使うことで確認する事ができました。

Webサイトからデータ取得時にsleep( )関数を使ってWaitするとサーバーの負荷を減らせる

Webサイトからデータをスクレイピングをして取得するとサーバーに負荷がかかりますが、sleep( )関数を使いスクレイピングの処理時間の間隔をあけることによりサーバーの負荷をへらす事ができます。

例としてseleniumモジュールを使ってスクレイピングでデータを取得時にsleep( )関数を扱っていきます。

まずはseleniumモジュールのwebdriverをインポートします。

from selenium import webdriver

そして今回はブラウザをGooglechromeを使用するのでchromedriver_binaryモジュールもインポートします。

import chromedriver_binary
from selenium import webdriver
import time
import chromedriver_binary

#ChromeOptionsを設定
options = webdriver.ChromeOptions()

#Chromeを起動
driver = webdriver.Chrome(options=options)

#指定したURLに遷移
driver.get('https://hosl.dev/')
#5秒待機
time.sleep(5)

#文字列を取得
p = driver.find_element_by_tag_name("p")
print(p.text)

#Chromeブラウザを終了
driver.quit()

出力結果:

本町オープンソースラボ

Googleクロムのブラウザ画面から「https://hosl.dev/」のWebページを表示して5秒待機してから指定したpタグのテキストを取得する事ができました。このようにデータにアクセスする間隔をあけることによりサーバーに負荷を減らす事ができます。

まとめ

Pythonのsleep( )関数を使って実行処理を待機させる事ができました。sleep( )関数はサーバーに負荷をかけたくないWebページスクレイピング処理などによく使われます。以上、Pythonのsleep( )関数で実行処理を待機する方法でした。

Udemyの動画学習でもPythonを勉強しよう!

「平日の夜の勉強会には時間が間に合わなくて参加できない」「通勤時間のわずかな隙間時間を勉強時間にあてたい」「本ではよく分からないところを動画で理解を深めたい」そんなあなたはUdemyの動画学習がお勧めです!

UdemyのPythonおすすめ33講座レビューリスト
HOSL

Author HOSL

More posts by HOSL