時間でなくループ回数で判定してみては如何でしょう。
その処理のループ回数の最大を見積もることができることが必要ですが。
ここでは 2 つの ループで回している処理があります。
最初のループは 10 秒かかりますが、処理は終了します。
次のループは、break 判定が間違っているので break が実行されうることがありません。
でもループ実行回数が 想定されるループ回数より多いので変だ と感知しています。
p.py
python3
1import time
2
3MAX_LOOP_COUNT = 100
4
5# 処理時間がかかるが, 想定される最大ループ回数m中で処理が終わる
6# 1 .. 10 までの合計を求める
7sum = 0
8i = 1
9loop_count = 0
10
11while loop_count < MAX_LOOP_COUNT:
12 print(".", flush=True, end="")
13 time.sleep(1)
14 sum += i
15 i += 1
16 if i >= 10:
17 break
18 loop_count += 1
19
20if loop_count >= MAX_LOOP_COUNT:
21 print("\n無限ループの可能性があるので、処理を中断しました。")
22else:
23 print("\nsum=", sum)
24
25# break 条件が間違っているので無限ループになってしまう処理だが、
26# それを検知している。
27sum = 0
28i = 1
29loop_count = 0
30while loop_count < MAX_LOOP_COUNT:
31 print(".", flush=True, end="")
32 time.sleep(0.01)
33 sum += i
34 i += 1
35 if i < 0: # <-- 条件が間違っている
36 break
37 loop_count += 1
38
39if loop_count >= MAX_LOOP_COUNT:
40 print("\n無限ループの可能性があるので、処理を中断しました。")
41else:
42 print("\nsum=", sum)
43
実行例