raspberry pi python等待输入占用了大部分cpu

raspberry pi python等待输入占用了大部分cpu,python,raspberry-pi,cpu-usage,Python,Raspberry Pi,Cpu Usage,我的python程序等待来自键盘的输入,然后根据该输入运行。当等待输入时,它会占用93%的cpu,但一旦收到输入,它只会占用1.5% 有关守则如下: class keypad(): KEYPAD = [ [1,2,3], [4,5,6], [7,8,9], ["*",0,"#"] ] ROW = [21,6,13,19] COLUMN = [12,16,20] def __init__(self): GPI

我的python程序等待来自键盘的输入,然后根据该输入运行。当等待输入时,它会占用93%的cpu,但一旦收到输入,它只会占用1.5%

有关守则如下:

class keypad():
    KEYPAD = [
    [1,2,3],
    [4,5,6],
    [7,8,9],
    ["*",0,"#"]
    ]
    ROW = [21,6,13,19]
    COLUMN = [12,16,20]

    def __init__(self):
        GPIO.setmode(GPIO.BCM);
    def getKey(self):
        for j in range(len(self.COLUMN)):
            GPIO.setup(self.COLUMN[j], GPIO.OUT)
            GPIO.output(self.COLUMN[j], GPIO.LOW)

        for i in range(len(self.ROW)):
            GPIO.setup(self.ROW[i], GPIO.IN, pull_up_down=GPIO.PUD_UP)

        rowVal = -1
        for i in range(len(self.ROW)):
            tmpRead = GPIO.input(self.ROW[i])
            if tmpRead == 0:
                rowVal = i

        if (rowVal < 0) or (rowVal > 3):
            self.exit()
            return
        for j in range(len(self.COLUMN)):
            GPIO.setup(self.COLUMN[j], GPIO.IN, pull_up_down=GPIO.PUD_DOWN)

        GPIO.setup(self.ROW[rowVal], GPIO.OUT)
        GPIO.output(self.ROW[rowVal], GPIO.HIGH)

        colVal = -1
        for j in range(len(self.COLUMN)):
            tmpRead = GPIO.input(self.COLUMN[j])
            if tmpRead == 1:
                colVal = j

        if (colVal < 0) or (colVal > 2):
            self.exit()
            return

        self.exit()
        return self.KEYPAD[rowVal][colVal]

    def exit(self):
        for i in range(len(self.ROW)):
            GPIO.setup(self.ROW[i], GPIO.IN, pull_up_down=GPIO.PUD_UP)
        for j in range(len(self.COLUMN)):
            GPIO.setup(self.ROW[i], GPIO.IN, pull_up_down=GPIO.PUD_UP)

def phys_in():
        while True:
                kp = keypad()   
                list = ['']
                digit = None
                while True:
                    digit = kp.getKey()
                    if digit != None and digit != '*' and digit != '#':
                        list.append(str(digit))
                        time.sleep(.5)
                        digit = None
                    elif digit == '*':
                        while True:
                            stop = kp.getKey()
                            temp_con.t = int(''.join(list))
class小键盘():
键盘=[
[1,2,3],
[4,5,6],
[7,8,9],
["*",0,"#"]
]
行=[21,6,13,19]
列=[12,16,20]
定义初始化(自):
GPIO.setmode(GPIO.BCM);
def getKey(自):
对于范围内的j(len(self.COLUMN)):
GPIO.setup(self.COLUMN[j],GPIO.OUT)
GPIO.output(自列[j],GPIO.LOW)
对于范围内的i(len(self.ROW)):
GPIO.setup(self.ROW[i],GPIO.IN,pull\u up\u down=GPIO.PUD\u up)
rowVal=-1
对于范围内的i(len(self.ROW)):
tmpRead=GPIO.input(self.ROW[i])
如果tmpRead==0:
rowVal=i
如果(rowVal<0)或(rowVal>3):
self.exit()
返回
对于范围内的j(len(self.COLUMN)):
GPIO.setup(self.COLUMN[j],GPIO.IN,pull\u up\u down=GPIO.PUD\u down)
GPIO.setup(self.ROW[rowVal],GPIO.OUT)
GPIO.output(self.ROW[rowVal],GPIO.HIGH)
colVal=-1
对于范围内的j(len(self.COLUMN)):
tmpRead=GPIO.input(self.COLUMN[j])
如果tmpRead==1:
colVal=j
如果(colVal<0)或(colVal>2):
self.exit()
返回
self.exit()
返回自我键盘[rowVal][colVal]
def出口(自):
对于范围内的i(len(self.ROW)):
GPIO.setup(self.ROW[i],GPIO.IN,pull\u up\u down=GPIO.PUD\u up)
对于范围内的j(len(self.COLUMN)):
GPIO.setup(self.ROW[i],GPIO.IN,pull\u up\u down=GPIO.PUD\u up)
def phys_in():
尽管如此:
kp=键盘()
列表=['']
数字=无
尽管如此:
digit=kp.getKey()
如果是数字!=无和数字!='*'和数字!=“#”:
列表。追加(str(数字))
时间。睡眠(.5)
数字=无
elif数字=='*':
尽管如此:
stop=kp.getKey()
temp_con.t=int(''.join(列表))

等待输入会占用这么多cpu,这对我来说毫无意义。有人能在网站上提供一些原因吗?

在任何时候,你都不会真正等待任何东西;无论是否发生任何事情,您都在不断地重新扫描键盘。您的内部
为True时:
循环需要有一个延迟(可能是0.01秒),如果没有按任何键。这非常有效,谢谢。