Python是等待输入的最有效方式

The*_*uff 5 python raspberry-pi

我有一个python程序,我想在后台运行(在Raspberry Pi上)等待GPIO输入然后执行操作并继续等待输入,直到进程被终止.

实现这一目标的最有效方法是什么.我的理解是,使用while true并不是那么有效.理想情况下它会使用中断 - 我可以使用GPIO.wait_for_edge - 但这需要在某个循环中或在处理程序完成后继续操作的方式.

谢谢

Mar*_*ark 2

据此: http: //raspi.tv/2013/how-to-use-interrupts-with-python-on-the-raspberry-pi-and-rpi-gpio GPIO.wait_for_edge(23, GPIO.FALLING) 将使用中断而不是轮询等待引脚 23 上的转换。仅当触发时才会继续。您可以将其括在 try: / except KeyboardInterrupt 中以捕获 ctrl-c。

如果您想继续处理,那么您应该为中断注册一个回调函数。请参阅: http ://sourceforge.net/p/raspberry-gpio-python/wiki/Inputs/

def callback(channel):
   do something here

GPIO.add_event_detect(channel, GPIO.RISING, callback=my_callback)
continue your program here, likely in some sort of state machine
Run Code Online (Sandbox Code Playgroud)

  • 是的,我认为你总是需要一个循环来保持程序的运行。但您可以让它休眠一段时间,这将大大减少 CPU 使用率。根据您需要在循环中执行的操作以及回调实现的内容,您的睡眠时间可以是 10 毫秒、1 秒、10 秒等。 (2认同)