我制作了一个程序,在网上收集气象信息,当用户按下按钮时打印出来。我用函数add\u event\u detect from Rpio.GPIO制作了一个新版本的程序,但是程序变得非常慢
我用的是覆盆子Pi3B+和覆盆子酱
我的程序例外是:
def init():
GPIO.setmode(GPIO.BCM)
GPIO.setup(5, GPIO.IN, pull_up_down=GPIO.PUD_UP)
GPIO.add_event_detect(5, GPIO.RISING, callback=bouton_presse, bouncetime=500)
def bouton_presse(channel):
start_time = time.time()
print "Bouton presse"
try:
print "Connexion"
req=requests.get('http://www.meteo-paris.com/')
print "Connexion reussi"
print "Traitement du fichier html"
soup = BeautifulSoup(req.text, 'html.parser')
print "Soup cree"
print "Extraction de l'information"
elt=soup.find("div", { "class" : "bloc_aujourdhui_pluie_texte" })
print "Info extraite"
print "Formattage du texte"
pourcent=elt.span.string
print "Texte formatte"
pluie=float(pourcent[:-1])/100
print "pluie:",pluie
rcol=int((1-pluie)*255)
vcol=int(0.5*(1-pluie)*255)
bcol=int(pluie*255)
except:
print "Erreut de connexion"
rcol,vcol,bcol=255,0,0
print "Couleurs:",rcol,vcol,bcol
setRGB(rcol,vcol,bcol)
print("--- %s seconds ---" % (time.time() - start_time))
time.sleep(5)
rcol,vcol,bcol=0,0,0
print "Extinction"
setRGB(rcol,vcol,bcol)
if __name__ == '__main__':
try:
init()
while True:
pass
except KeyboardInterrupt:
print "Shutdown requested...exiting"
except Exception:
traceback.print_exc(file=sys.stdout)
GPIO.cleanup()
sys.exit(0)
没有:
def init():
GPIO.setmode(GPIO.BCM)
GPIO.setup(5, GPIO.IN, pull_up_down=GPIO.PUD_UP)
def bouton_presse():
start_time = time.time()
print "Bouton presse"
try:
print "Connexion"
req=requests.get('http://www.meteo-paris.com/')
print "Connexion reussi"
print "Traitement du fichier html"
soup = BeautifulSoup(req.text, 'html.parser')
print "Soup cree"
print "Extraction de l'information"
elt=soup.find("div", { "class" : "bloc_aujourdhui_pluie_texte" })
print "Info extraite"
print "Formattage du texte"
pourcent=elt.span.string
print "Texte formatte"
pluie=float(pourcent[:-1])/100
print "pluie:",pluie
rcol=int((1-pluie)*255)
vcol=int(0.5*(1-pluie)*255)
bcol=int(pluie*255)
except:
print "Erreut de connexion"
rcol,vcol,bcol=255,0,0
print "Couleurs:",rcol,vcol,bcol
setRGB(rcol,vcol,bcol)
print("--- %s seconds ---" % (time.time() - start_time))
time.sleep(5)
rcol,vcol,bcol=0,0,0
print "Extinction"
setRGB(rcol,vcol,bcol)
if __name__ == '__main__':
try:
init()
while True:
if GPIO.input(5)==GPIO.HIGH:
bouton_presse()
except KeyboardInterrupt:
print "Shutdown requested...exiting"
except Exception:
traceback.print_exc(file=sys.stdout)
GPIO.cleanup()
sys.exit(0)
如果没有add\u event\u detect,需要0.4秒;如果没有add\u event\u detect,需要2秒。我更喜欢使用exception,但是2s太长了!问题出在哪里
为了找出这个项目的花费时间,我建议如下:
一般来说,这类回调应该短而快。相反,
bouton_presse()
发出一个http请求并休眠5秒钟。通常,回调会设置一个全局标志,当设置了该标志时,主循环会执行一些操作相关问题 更多 >
编程相关推荐