我有一些raspberry pi
运行一些python
代码。有时我的设备会无法签入。其余的python代码继续完美地运行,但是这里的代码退出了。我不知道为什么?如果设备无法签入,它们应该重新启动,但它们不会重新启动。python
文件中的其他线程继续正常运行。在
class reportStatus(Thread):
def run(self):
checkInCount = 0
while 1:
try:
if checkInCount < 50:
payload = {'d':device,'k':cKey}
resp = requests.post(url+'c', json=payload)
if resp.status_code == 200:
checkInCount = 0
time.sleep(1800) #1800
else:
checkInCount += 1
time.sleep(300) # 2.5 min
else:
os.system("sudo reboot")
except:
try:
checkInCount += 1
time.sleep(300)
except:
pass
这些设备可以运行数天或数周,每30分钟就可以正常运行一次,然后突然停止运行。我的linux
计算机是只读的,计算机继续正常工作和运行。我的问题就在这条线上。我想他们可能得不到回应,这条线可能就是问题所在
我不知道如何解决这个问题,任何帮助或建议将不胜感激。在
谢谢你
一个空的^{} is a very bad idea 。在
更好的方法是,至少记录所有异常:
然后,当您遇到异常时,您将得到一个日志:
^{pr2}$您的代码也可能挂在^{} 或{a3}上。您可以添加额外的日志来解决您遇到的问题,尽管您已经看到它会重新启动,但我怀疑它是
requests.post
,在这种情况下,您需要添加一个timeout (from the linked answer):因为有了答案,我才想出了一个解决办法。我意识到请求有一个内置的超时功能。如果未将超时指定为参数,则不会发生超时。
我的解决方案是:
临时沃尔夫和其他人提供的答案对我帮助很大。谢谢你的帮助。在
您的代码基本上会忽略所有异常。这在Python中被认为是一件坏事。在
对于您所看到的行为,我能想到的唯一原因是,在
checkInCount
达到50之后,sudo reboot
会引发一个异常,然后被程序忽略,使这个线程陷入无限循环。在如果您想知道实际发生了什么,请将}语句添加到代码的所有不同分支中。在
print
或{或者,删除blanket try except子句或将其替换为特定的内容,例如
except requests.exceptions.RequestException
相关问题 更多 >
编程相关推荐