はじめに
「while Trueで回し続ければ確実に処理できる!」
え、まだ終了条件なしのループを書いてるんですか?これ本番に出すと数秒でサーバーが応答停止します
この記事で解決すること
動画「【恐怖】無限ループでサーバーダウン」の補足記事です。
動画では時間の都合で触れられなかった詳細を解説します。
問題:なぜこれが危険なのか
え、まだ終了条件なしのループを書いてるんですか?これ本番に出すと数秒でサーバーが応答停止します
解決策:明日から使えるベストプラクティス
必ず終了条件を設定し、タイムアウト処理とエラーハンドリングを追加する
以下は、YouTube動画や社内勉強会でそのまま使える構成の具体例です。
問題:なぜこれが危険なのか
え、まだ終了条件なしのループを書いてるんですか?
無限ループはCPUを占有し続け、APIサーバーやバッチ処理を停止させる原因になります。特に本番環境では、リクエスト処理が滞り、サービス全体に影響を及ぼすことがあります。
例えば、こんなコードです。
❌ 終了条件のないループ
while True:
print("データを処理中...")
実行すると、
- CPU使用率が上昇する
- プログラムが終了しない
- サーバーのリソースを消費し続ける
結果として、他の処理にも悪影響を与える可能性があります。
APIの待ち合わせでも同じ
❌ レスポンスを永遠に待つ
import requests
while True:
response = requests.get(
"https://example.com/api/status"
)
if response.json()["status"] == "completed":
break
一見問題なさそうですが、
- APIが障害で停止している
- ネットワークが切断された
-
completedが返ってこない
場合、このループは永久に終了しません。
解決策:明日から使えるベストプラクティス
終了条件・タイムアウト・例外処理を必ず実装しましょう。
✅ 改善版
import time
import requests
MAX_RETRY = 10
for attempt in range(MAX_RETRY):
try:
response = requests.get(
"https://example.com/api/status",
timeout=5
)
if response.json()["status"] == "completed":
print("処理完了")
break
print("まだ処理中...")
time.sleep(1)
except requests.Timeout:
print("タイムアウト")
except requests.RequestException as e:
print(f"通信エラー: {e}")
else:
print("最大試行回数を超えました")
このコードでは、
- 最大10回で終了
- 通信タイムアウトを5秒に設定
- 通信エラーを適切に処理
- 1秒待機してAPIへの負荷を軽減
と、安全に実装されています。
バグになりやすい例
❌ フラグを更新し忘れる
finished = False
while not finished:
print("処理中...")
finishedが一度もTrueにならないため、
永久ループになります。
✅ 条件を更新する
finished = False
count = 0
while not finished:
print("処理中...")
count += 1
if count >= 5:
finished = True
これなら5回で終了します。
サーバー処理でも危険
❌ キューを待ち続ける
while True:
task = queue.get()
process(task)
例外が発生すると、
処理停止
あるいは逆に異常状態のままループし続けることがあります。
✅ エラーハンドリングを追加
while True:
try:
task = queue.get(timeout=10)
process(task)
except Empty:
print("タスク待機中")
except Exception as e:
print(e)
break
想定外のエラー時はログを残して終了できるため、障害調査もしやすくなります。
明日から実践できるチェックリスト
-
while Trueを使う理由を明確にする - 必ず終了条件(
breakや最大試行回数)を設ける - 外部APIやデータベース通信にはタイムアウトを設定する
-
try-exceptで例外を適切に処理する - リトライ時は
time.sleep()などで待機時間を設け、過剰な負荷を避ける
まとめ
「いつか終わるはず」ではなく、「必ず終わる設計」にすることが重要です。
終了条件のないループは、本番環境でCPUやサーバー資源を使い続け、サービス停止につながる原因になります。終了条件・タイムアウト・例外処理・最大試行回数を組み合わせることで、安全で保守しやすいプログラムを実現できます。
まとめ
無限ループを卒業して、安全なループ設計を習得しましょう!
#まだやってるんですか #コードの女神はみた #プログラミングスキル
動画で見る
YouTubeショート動画でも同じテーマを解説しています👇
チャンネル登録・高評価もよろしくお願いします 🔔
この記事は「コードの女神は見た!」チャンネルの連動記事です。