0

我正在使用树莓派 3 和 python 2.7 请求将数据发布到我的灯服务器。除了被困request.exceptions.ConnectTimeout的间歇性发布错误外,所有工作都很好。顺便说一句,超时=0.5 秒,这是发布时间(0.2 秒)的 2.5 倍。请参阅下面的代码。

当请求异常发生时,我使用 CheckConnection() 检查互联网访问。顺便说一句,这在 pi 上只需要 0.016 秒;与其他技术相比,速度如此之快。当为 False 时,它​​不会重试发布并在本地记录数据。

但是,在发生这种情况时,我可以使用 TeamViewer 远程连接到 Pi! 我正在通过其他安装将数据发布到我们的服务器,因此这不是云服务器停机问题。

几分钟到几分钟后,问题自行解决,并发布简历,就像没有任何问题一样。

任何关于如何更改代码的建议都非常受欢迎,以确定根本原因或解决问题。先感谢您。

******** 代码 ************

def PostData(有效负载,retry_count=3):

url = 'http://xxx.xxx.xxx.xxx/api/data/push/'
try:
    response = requests.post(url,params=payload,timeout=0.5)
    if response.status_code == 200:
        return response.text
    response.raise_for_status()

except (requests.exceptions.RequestException, requests.exceptions.ConnectTimeout) as e:
    print "Post Error..."
    x = CheckConnection()
    if x==False:
        return "Internet for Posting: " + str(x)
    if retry_count >0:
        Reason = "Post Settings Retry: " + str(retry_count) 
        print Reason
        #sleeptime = 0.05*2**(3-retry_count)
        #time.sleep(sleeptime)            
        return PostData(payload, retry_count-1)
    if retry_count==0:
        Reason = "Error! Post settings retry failed. Retry=0.  Internet: " + str(x) 
        return Reason
    return None

except Exception as e:
    x = CheckConnection()
    Reason= "Error! Posting Exception: " + str(e) + "Internet: " + str(x)
    print Reason
    return None

def CheckConnection(host="8.8.8.8",port=53,timeout=0.5):

try:
    socket.setdefaulttimeout(timeout)
    socket.socket(socket.AF_INET,socket.SOCK_STREAM).connect((host,port))
    return True
except Exception:
    return False
4

0 回答 0