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

Python requests.get请求卡顿:局域网温感数据读取脚本异常排查

解决Python脚本读取局域网温度数据时卡住的问题

我之前也碰到过一模一样的情况!你的脚本毫无征兆卡住的核心原因其实很直白:requests.get()方法默认没有设置超时时间。当局域网里的服务器偶尔响应慢、临时掉线,或者请求半路丢包时,requests会一直傻等服务器的回复,直接导致脚本僵住无响应。

快速修复方案

给requests.get()加上超时参数,同时增加异常处理逻辑,这样即使遇到问题,脚本也不会卡住,还能继续循环执行。修改后的代码如下:

import requests
import time

while True:
    s = time.time()
    try:
        # 设置超时时间,这里设3秒(可根据局域网稳定性调整)
        r = requests.get("http://192.168.1.2/readtemp.php?id=1&action=read", timeout=3)
        # 确保请求成功(状态码为200)
        r.raise_for_status()
        temp = r.text
        print(f"{temp} - {time.time() - s:.6f} Seconds")
    except requests.exceptions.RequestException as e:
        # 捕获所有请求相关异常,打印错误信息不中断脚本
        print(f"请求出错: {str(e)} - 耗时: {time.time() - s:.6f} Seconds")
    time.sleep(2)

关键改动说明

  • 添加timeout参数:我这里设了3秒,你可以根据局域网的实际情况调整(比如2-5秒都合适)。超过这个时间没收到响应,requests会直接抛出超时异常,不会一直挂着占用资源。
  • 异常捕获:用try-except包裹请求逻辑,不管是超时、网络断开还是服务器返回错误状态码(比如500、404),都会触发异常处理,脚本可以继续下一次循环,不会崩溃或卡住。
  • r.raise_for_status():用来检查请求是否成功,如果服务器返回错误状态码,会主动抛出异常,避免我们处理无效的响应内容。

额外优化小技巧

  • 如果服务器偶尔抽风,可以加个简单的重试逻辑,比如连续失败2次再跳过:
    retry_count = 0
    while retry_count < 2:
        try:
            r = requests.get("http://192.168.1.2/readtemp.php?id=1&action=read", timeout=3)
            r.raise_for_status()
            temp = r.text
            print(f"{temp} - {time.time() - s:.6f} Seconds")
            break
        except requests.exceptions.RequestException as e:
            retry_count +=1
            print(f"重试第{retry_count}次,错误: {str(e)}")
            time.sleep(1)
    
  • 可以用logging模块替代print记录错误信息到文件,方便后续排查服务器不稳定的原因。

内容的提问来源于stack exchange,提问作者M. Serseg

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:00:19