コンテンツにスキップ

Pythonでの一時停止の方法

[

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

time.sleep()を使ったPython sleep()の追加

以下は、time.sleep()の使用例です。

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

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

注意: Python 3.5では、time.sleep()の挙動がわずかに変更されました。新しいPythonのsleep()システムコールは、指定した秒数以上のスリープが一時中断された場合でも、最低限その秒数で処理が続行されます。ただし、シグナル自体が例外を発生させる場合は適用されません。

Pythonのtimeitモジュールを使用してスリープがどれくらい続くかをテストすることができます:

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

ここでは、timeitモジュールを-nパラメータと共に実行しています。これにより、後続のステートメントを何回実行するかをtimeitに指示することができます。上記のコードでは、time.sleep(3)ステートメントが3回実行され、最速の実行時間が3秒であることが分かります。

timeitがデフォルトで実行する回数は100万回です。したがって、デフォルトの-nを使用して上記のコードを実行すると、1回あたり3秒かかるため、ターミナルは約34日間ハングすることになります。timeitモジュールには、ドキュメンテーションで確認できる他のコマンドラインオプションもあります。

では、もう少し実践的なものを作成しましょう。システム管理者は、自分のウェブサイトがダウンしたことを知りたいと考えています。ウェブサイトのステータスコードを定期的にチェックできるようにしたいのですが、リクエストの間に適切なタイムディレイを入れる必要があります。

以下のコードは、指定したURLにリクエストを送信し、ステータスコードを確認する関数です。time.sleep()を使用してリクエストの間に1秒の遅延を追加します。

import requests
import time
def check_website(url):
while True:
response = requests.get(url)
status_code = response.status_code
print(f"Website status code: {status_code}")
time.sleep(1)
check_website('https://www.example.com')

この例では、無限ループ内でリクエストを繰り返し、ステータスコードを表示します。time.sleep(1)の場所に注意してください。これにより、各リクエストの間に1秒の遅延が追加されます。

これで、Pythonのtime.sleep()を使用してプログラムに時間の遅延を追加する方法を学びました。次は、デコレータ、スレッド、Async IO、GUIといった他の方法でPythonのsleep()を使用する方法を紹介します。