我正在Raspberry Pi上使用python连接到网站,并且似乎每天都得到间歇性结果。我设置它的第一天效果很好,第二天它将运行一次或两次然后挂起。昨天没问题,但今天又挂了一两个循环。所以我正在尝试进行故障排除。
我的第一个问题:urllib2.urlopen是否被阻止?我了解每个here都会阻止连接尝试,但是否则代码可以继续运行而没有响应吗?我对JavaScript的异步样式更满意。
有关如何进行故障排除的其他提示?
我的网站托管在GoDaddy的“经济”网站上。代码在下面。
预期:根据buttonStatus.php文件的内容,代码每10秒打印一次“锁定”或“解锁”。
实际:代码打印“锁定”或“解锁”一次或两次,然后挂起,不打印任何内容,必须停止。这似乎与.php文件内容更改的时间有关。
编辑:在进行了更多的故障排除之后,我看到每次响应都会返回,但是通常需要一分钟。如何改善效能?良好的用户体验每次最多最多需要几秒钟。
import sys
import urllib2
import RPi.GPIO as GPIO
import time
redLED = 37
grnLED = 32
srvPin = 3
GPIO.setmode(GPIO.BOARD)
GPIO.setup(redLED, GPIO.OUT)
GPIO.setup(grnLED, GPIO.OUT)
GPIO.setup(srvPin, GPIO.OUT)
pwm = GPIO.PWM(srvPin, 50)
def lock(ev=None):
print('locking')
def unlock(ev=None):
print('unlocking')
def loop():
while True:
try:
response = urllib2.urlopen('http://www.example.com/IoT/buttonStatus.php')
status = response.read()
except urllib2.HTTPError, e:
print e.code
except urllib2.URLError, e:
print e.args
print status
# 'ON' = locked
if status == 'ON':
lock()
# 'OFF' = unlocked
elif status == 'OFF':
unlock()
time.sleep(10)
def destroy():
GPIO.cleanup()
if __name__ == '__main__':
try:
loop()
except KeyboardInterrupt:
destroy()
buttonStatus.php的内容为:
<?php
$status = file_get_contents("buttonStatus.txt");
echo $status;
?>
其中的buttonStatus.txt是一个文本文件,其中包含字符串“ ON”或“ OFF”。整个方法详细here。