Я использую Raspberry Pi 3 и Python 2.7 с запросами на публикацию данных на моем сервере лампы.Все прекрасно работает, за исключением периодических ошибок публикации, которые перехватываются запросами.exceptions.ConnectTimeout.Кстати, время ожидания = 0,5 с, что в 2,5 раза больше времени регистрации (0,2 с).Смотрите код ниже.
Когда возникает исключение запроса, я проверяю доступ в Интернет с помощью CheckConnection ().Кстати, это занимает всего 0,016 секунды на пи, так быстро по сравнению с другими методами.При значении False публикация не повторяется и данные регистрируются локально.
Однако я могу удаленно подключиться к Pi с помощью TeamViewer, пока это происходит! Я отправляю данные на наш сервер с другими установками, так что это не проблема отключения облачного сервера.
Через несколько минут проблема решается сама собой и публикует резюме, как будто ничего не случилось.
Любые предложения о том, как я могу изменить свой код, приветствуются либо для определения основной причины, либо для устранения проблемы.,Заранее благодарим.
******** КОД ************
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 (хост = "8.8.8.8", порт = 53, время ожидания = 0,5):
try:
socket.setdefaulttimeout(timeout)
socket.socket(socket.AF_INET,socket.SOCK_STREAM).connect((host,port))
return True
except Exception:
return False