組み込み開発のためのPython · レッスン 197 / 220
for・whileと繰り返しの停止条件
有限回の処理とタイムアウト付き待機を区別して、止まらないループを防ぎます。
装置の応答を待つ処理では、条件が成立しないと無限に待ち続ける危険があります。繰り返し回数か時間制限を設け、終了理由を記録できるようにします。
既知の件数にはforを使う
固定回数の測定やリストの走査には`for`を使います。`range(n)`は0から始まるため、ループ回数と表示上の番号を混同しないよう注意してください。ループ内で値を更新する場合は、最初の値・更新式・終了条件を一組として確認します。
待機にはタイムアウトを用意する
`while`は条件が変化しなければ処理が続きます。通信状態の待機では、単調増加する時計で期限を計算し、期限が来たら明確なタイムアウトとして終了します。単純な固定スリープは処理を遅らせるだけで、応答が来たかどうかの判定にはなりません。
コード例
手元のPython環境に貼り付ける前に、使用しているPythonの版と対象ライブラリの対応を確認してください。
import time
deadline = time.monotonic() + 2.0
while not response_ready():
if time.monotonic() >= deadline:
raise TimeoutError("応答待ちが時間切れになりました")
time.sleep(0.01)手を動かす課題
ポーリングの最大時間と確認間隔を設定し、期限切れと成功の両方を試験できるダミー関数を作ってください。