You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python无限while循环监控网络连接?代码异常及方案咨询

问题解答

需求:用无限while循环实现「网络可用时执行特定功能、不可用时打印提示」,代码如下:

import requests,time
while True:
    print("HI")
    try:
        requests.get('https://www.google.com/').status_code
        print('online')
    except:
        print('offline')

问题:代码首次运行正常,但网络断开后陷入停滞无输出,请问原因是什么?另外,用无限while循环完成该任务是否是好方案?

一、网络断开后代码停滞的原因

核心问题是requests.get()方法默认没有设置超时时间。当网络断开时,请求会一直处于等待服务器响应的状态,不会主动终止,导致整个循环卡在这一步,无法继续执行后续的打印或循环逻辑。

解决方法很简单,给get请求加上超时参数,比如设置10秒超时:

requests.get('https://www.google.com/', timeout=10).status_code

这样如果超过10秒没得到响应,就会触发超时异常,进入except块打印offline,循环就能继续运行。

二、无限while循环是否是合适的解决方案

优点:

  • 逻辑简单直接,容易理解和实现,适合快速验证需求。
  • 不需要依赖额外的定时任务工具或框架。

缺点:

  • 如果不加延迟,循环会以极高的频率执行,占用大量CPU资源,导致系统卡顿。
  • 缺乏优雅的终止机制,除非手动中断程序,否则会一直运行。

优化建议:

如果要用while循环,至少要在每次循环末尾加上延迟,比如time.sleep(5),让程序每隔5秒检测一次网络,减少资源消耗:

import requests,time
while True:
    print("HI")
    try:
        requests.get('https://www.google.com/', timeout=10).status_code
        print('online')
    except:
        print('offline')
    time.sleep(5)  # 每次检测后等待5秒

如果是长期运行的服务类场景,更推荐用定时任务框架(比如APScheduler)或者系统级定时任务(如Linux的crontab、Windows的任务计划程序),这类方案更稳定、资源占用更低,也更容易管理和终止任务。

内容的提问来源于stack exchange,提问作者imtiaz ul Hassan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 20:43:50