如何用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
相关产品推荐
相关产品推荐

