Python urllib2.urlopen是否被阻止?

时间:2018-07-08 15:18:58

标签: php python raspberry-pi

我正在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

0 个答案:

没有答案