IT・WEB・ゲーム業界の転職に強いR-Stone

転職コラム

Pythonのsleepとは?使い方や書き方、注意点などをご紹介

プログラムの処理速度を調整したい、一定間隔で処理を実行したい、そんな要望に応えるのがPythonのsleep()関数です。

標準ライブラリのtimeモジュールに含まれるsleep()関数を使えば、プログラムを一時停止させ、処理のタイミングを制御できます。

WEBスクレイピングやセンサーデータの取得、APIリクエストの間隔調整など、実践的な場面での活用が可能です。

本記事では、sleep()関数の基本的な使い方から応用テクニック、注意点まで、具体的な使用例を交えながら詳しく解説します。

Pythonのsleep()とは?

Pythonのsleep()は、プログラムの実行を一時的に停止する関数で、標準ライブラリのtimeモジュールに含まれています。

sleep()はプログラムの処理速度を調整したり、一定間隔の処理を実行する際に役立ち、 WEBスクレイピングやセンサーからのデータ取得などでよく使用されます。

Pythonのsleep()でできること

Pythonのsleep()関数をどのように活用できるか、具体的に見ていきましょう。

一定時間ごとに処理を実行する

sleep()関数を使うと、定期的に処理を実行するプログラムを簡単に作成できます。

サーバーの状態監視やセンサーデータの定期取得など、継続的な監視が必要なシステムで活用されます。

例えば、whileループとsleep()を組み合わせます。

import time

 

while True:

    # ここにデータ取得や処理を記述

    print(“データを取得しました”)

    # 60秒待機

    time.sleep(60)

処理の実行タイミングを遅らせる

sleep()関数は処理の実行タイミングを意図的に遅らせたい場合にも役立ちます。

例えば、少し待ってからリトライすると、一時的なネットワーク障害などを回避できます。

import time

import requests

 

def fetch_data(url):

    for attempt in range(3):  # 3回までリトライ

        try:

            response = requests.get(url)

            return response.json()

        except:

            print(f”エラー発生。{5 * (attempt + 1)}秒後にリトライします”)

            time.sleep(5 * (attempt + 1))  # リトライ間隔を徐々に長くする

    return None  # すべてのリトライが失敗

負荷を抑えるための間隔調整

sleep()関数は、外部サービスやリソースに過剰な負荷をかけないようにするための速度制限にも活用できます。

特にWEBスクレイピングやAPI呼び出しでは、短時間に大量のリクエストを送ると相手サーバーに負担をかけたり、アクセス制限を受けたりする可能性があります。

import time

import requests

 

urls = [“https://example.com/page1”, “https://example.com/page2”, “https://example.com/page3”]

 

for url in urls:

    # WEBサーバーへのリクエストを送信

    response = requests.get(url)

    print(f”{url}からデータを取得しました”)

    # 次のリクエストまで2秒待機

    time.sleep(2)

sleep()関数の基本的な使い方

sleep()関数を使用するには、まずtimeモジュールをインポートする必要があります。

import time

time.sleep(秒数)  # 一時停止する秒数(小数点以下の秒数も指定可能)

具体的な使用例を見ていきましょう。

sleep()の記述例

sleep()関数の基本的な使い方は、次のようにシンプルです。

# 基本の例

import time

print(“処理を開始します”)

time.sleep(2# 2秒間停止

print(“2秒経過しました”)

ループ内でsleep()を使用すると、ほぼ一定間隔で処理ができます。

# 5秒ごとに現在時刻を表示する例

import time

from datetime import datetime

for i in range(5):

    current_time = datetime.now().strftime(“%H:%M:%S”)

    print(f”現在時刻: {current_time})

    time.sleep(5# 5秒間待機

ほかにも、APIリクエストを送信する関数で、リクエスト間に適切な間隔を設けられます。

# リクエストの間隔をあける例

import time

import requests

 

def fetch_data(urls):

    results = []

    for url in urls:

        response = requests.get(url)

        results.append(response.json())

        time.sleep(1# サーバー負荷軽減のため1秒待機

    return results

sleep()を使うときの注意点

Pythonのsleep()関数にはいくつかの注意点があります。

まず、sleep()はブロッキング処理なため、実行中は当該スレッドの処理が完全に停止します。UIがあるアプリでは画面がフリーズしたように見える場合があります。

また、実行環境によりsleep()の精度は異なり、厳密に指定した時間だけ停止するとは限りません。

他にも、非同期処理やイベントループを使用するアプリでは、通常のsleep()の代わりに、asyncioモジュールのasyncio.sleep()を使うと処理を停止せずに待機でき、他の処理を並行して実行できます。

import asyncio

 

async def main():

    print(“処理開始”)

    await asyncio.sleep(2# 非同期で2秒待機

    print(“処理再開”)

asyncio.run(main())

まとめ

Pythonのsleep()関数は、プログラムの一時停止に使用される便利な機能です。WEBスクレイピングやセンサーデータの取得、APIリクエストの間隔調整など、さまざまな場面で活用できます。

プログラムの安定性向上のため、ぜひsleep()関数の実装を検討してみましょう。