Python 如何优化此代码以减少CPU消耗

Python 如何优化此代码以减少CPU消耗,python,raspberry-pi,Python,Raspberry Pi,我有一个python代码,它有一个无限循环,可以精确地扫描raspberry pi的引脚。但是对于pi来说,它正在消耗大量的资源。请有人建议我如何减少代码中的CPU使用 from matrixKeypad_RPi_GPIO import keypad from time import sleep import urllib2 kp = keypad() var = 1 s1=True s2=True s3=True s4=True s5=True s6=True s7=True def digi

我有一个python代码,它有一个无限循环,可以精确地扫描raspberry pi的引脚。但是对于pi来说,它正在消耗大量的资源。请有人建议我如何减少代码中的CPU使用

from matrixKeypad_RPi_GPIO import keypad
from time import sleep
import urllib2
kp = keypad()
var = 1
s1=True
s2=True
s3=True
s4=True
s5=True
s6=True
s7=True
def digit():
    # Loop while waiting for a keypress
    r = None
    while r == None:
        r = kp.getKey()
    return r
while var == 1:
    d=digit()
    if d==1:
        if s1==True :
            urllib2.urlopen('http://192.168.0.2:8080/classicui/CMD?r1=ON')
        else:
            urllib2.urlopen('http://192.168.0.2:8080/classicui/CMD?r1=OFF')
        s1^=True
    if d==2:
        if s2==True :
            urllib2.urlopen('http://192.168.0.2:8080/classicui/CMD?r2=ON')
        else:
            urllib2.urlopen('http://192.168.0.2:8080/classicui/CMD?r2=OFF')
        s2^=True
    if d==3:
        if s3==True :
            urllib2.urlopen('http://192.168.0.2:8080/classicui/CMD?r3=ON')
        else:
            urllib2.urlopen('http://192.168.0.2:8080/classicui/CMD?r3=OFF')
        s3^=True
    if d==4:
        if s4==True :
            urllib2.urlopen('http://192.168.0.2:8080/classicui/CMD?r4=ON')
        else:
            urllib2.urlopen('http://192.168.0.2:8080/classicui/CMD?r4=OFF')
        s4^=True
    if d==5:
        if s5==True :
            urllib2.urlopen('http://192.168.0.2:8080/classicui/CMD?r5=ON')
        else:
            urllib2.urlopen('http://192.168.0.2:8080/classicui/CMD?r5=OFF')
        s5^=True
    if d==6:
        if s6==True :
            urllib2.urlopen('http://192.168.0.2:8080/classicui/CMD?r6=ON')
        else:
            urllib2.urlopen('http://192.168.0.2:8080/classicui/CMD?r6=OFF')
        s6^=True
    if d==7:
        if s7==True :
            urllib2.urlopen('http://192.168.0.2:8080/classicui/CMD?r7=ON')
        else:
            urllib2.urlopen('http://192.168.0.2:8080/classicui/CMD?r7=OFF')
        s7^=True
    sleep(1)

除了从轮询转移到中断驱动行为之外?显然我同意使用某种事件/中断,但这段代码实际上不是轮询。看看数字()。。。要么将休眠设置为digit,要么让digit返回None,如果None==d,则让循环直接跳到那里的休眠。您还可以将大部分代码隐藏在handle_digit函数中。快速查看源代码,该模块似乎只提供高cpu轮询。您可能想查看中断,或者他们似乎称之为“边缘检测”的内容,如何使其成为中断驱动的。我每次都要调用digit()从键盘获取输入