我正在使用树莓派3和python 2.7,并要求将数据发布到我的灯服务器。除了间歇性的张贴错误(捕获的request.exceptions.ConnectTimeout)外,其他所有方法都很好用。顺便说一句,超时= 0.5秒,是发布时间(0.2秒)的2.5倍。请参见下面的代码。
发生请求异常时,我使用CheckConnection()检查互联网访问。顺便说一句,这在pi上仅需0.016秒;与其他技术相比如此之快。为False时,它不会重试发布并在本地记录数据。
但是,在发生这种情况时,我可以使用TeamViewer远程连接到Pi!我将数据与其他安装一起发布到我们的服务器,因此这不是云服务器停机的问题。
几分钟到几分钟后,问题解决了,并且像没有错一样发布了简历。
无论是确定根本原因还是解决问题,都欢迎任何有关如何更改代码的建议。预先谢谢你。
********代码************
def PostData(有效载荷,重试次数= 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