Pythonでは、while True
を使用して無限ループを作成することができます。このループは、break
ステートメントが呼び出されるか、プログラムが終了するまで続きます。
しかし、このループ内で一定の待機時間を設けることがよくあります。例えば、サーバーからのレスポンスを待つ、特定の時間間隔でタスクを実行するなどの場合です。Pythonでは、time.sleep()
関数を使用してプログラムの実行を一時停止することができます。
以下に、一定の間隔でタスクを実行するための基本的なコードを示します。
import time
def worker():
print(time.time())
time.sleep(8)
interval = 5
while True:
worker()
time.sleep(interval)
しかし、このコードでは問題があります。worker()
関数の実行時間がinterval
に含まれてしまうため、実際の待機時間はinterval
+worker()
の実行時間となってしまいます。
これを解決するためには、次のようにスレッドを使用します。
import time
import threading
def worker():
print(time.time())
time.sleep(8)
def schedule(interval, f, wait=True):
base_time = time.time()
next_time = 0
while True:
t = threading.Thread(target=f)
t.start()
if wait:
t.join()
next_time = ((base_time - time.time()) % interval) or interval
time.sleep(next_time)
このコードでは、worker()
関数が新しいスレッドで実行され、その実行時間が主要なループから分離されます。これにより、指定した間隔で正確にタスクを実行することができます。
以上が、Pythonのwhile True
ループと待機処理の基本的な使い方です。この知識を活用して、Pythonプログラムのパフォーマンスを向上させることができます。