コンテンツにスキップ

Pythonで待機する方法

[

Python sleep(): コードに時間遅延を追加する方法

Mike Driscoll(中級者向け)

あなたは、Pythonプログラムが何かを待つ必要があったことはありますか?ほとんどの場合、コードはできるだけ速く実行されることを望むでしょう。しかし、コードをしばらく実行を一時停止させることが実際には最善の選択肢になることもあります。

このチュートリアルでは、以下の方法でPythonのsleep()関数を追加する方法を学びます:

  • time.sleep()
  • デコレータ
  • スレッド
  • Async IO
  • グラフィカルユーザインターフェース

この記事は、Pythonの知識を向上させたい中級開発者を対象としています。もしあなたがそのような人であれば、始めましょう!

無料ボーナス: よりクリーンでPythonicなプログラムを書くために使用できる、高度なデコレータのパターンとテクニックを示す無料の「The Power of Python Decorators」ガイドを入手してください。

time.sleep()を使用してPythonのsleep()関数を追加する

以下は、time.sleep()の使用方法の例です:

Python

import time
time.sleep(3) # 3秒間スリープする

もしコードをコンソールで実行すると、新しいステートメントを入力するまでに遅延が発生するはずです。

注意: Python 3.5以降、time.sleep()の動作がわずかに変更されました。新しいPythonのsleep()システムコールは、指定した秒数以上のスリープ時間が確保されます。ただし、そのスリープがシグナルによって中断された場合でも、シグナル自体が例外を発生させない限りは適用されません。

スリープがどれくらい続くかを確認するには、Pythonのtimeitモジュールを使用することができます:

Shell

ターミナルウィンドウ
$ python3 -m timeit -n 3 "import time; time.sleep(3)"
3 loops, best of 5: 3 sec per loop

ここでは、timeitモジュールを-nパラメータと共に実行しています。これにより、後続のステートメントを実行する回数をtimeitに指示することができます。実行回数が3回であり、最良の実行時間が3秒であることが確認できます。

これに対して、timeitがあなたのコードを実行するデフォルトの回数は100万回です。したがって、上記のコードをデフォルトの-nで実行した場合、イテレーションごとに3秒かかるため、ターミナルは約34日間応答しなくなってしまいます。timeitモジュールには、そのドキュメントで確認できるいくつかのコマンドラインオプションがあります。

もう少し現実的な例を作成してみましょう。システム管理者は、自分のウェブサイトのダウン状態を把握する必要があります。定期的にウェブサイトのステータスコードをチェックできるようにしたいですが、その前にPythonのプログラムを一時停止する必要があります。

import requests
import time
while True:
response = requests.get("https://www.example.com")
if response.status_code == 200:
print("Website is up!")
else:
print("Website is down!")
time.sleep(60) # 60秒間スリープする

上記のコードでは、requests.get()関数を使用してウェブサイトへのリクエストを行い、ステータスコードが200であるかを確認しています。もしステータスコードが200であれば、「Website is up!」と出力されます。それ以外の場合は、「Website is down!」と出力されます。

そして、time.sleep(60)を使って60秒間スリープします。これにより、ウェブサイトのステータスを定期的にチェックすることができます。