我有一个带有Sense帽子的树莓派。我制作了一个binary clock,我想在Sense帽子的显示屏上显示并保持更新。不过,我希望能够用操纵杆中间打开和关闭时钟。一切工作正常,除了我的时钟的更新循环阻止任何新的输入一旦开始。无阻塞无限循环
from sense_hat import SenseHat
from signal import pause
def show_clock():
# clock-logic
def pushed_middle(event):
while 1:
show_clock()
sense = SenseHat()
sense.stick.direction_middle = pushed_middle
pause
我一直在想如何解决这个问题。如何让脚本/时钟继续运行并仍然接受来自操纵杆的新操作。但是,一旦循环开始,我就卡住了。我不知道要谷歌什么。我已经开始研究异步/等待,但这似乎是一个Python 3.5+功能,而我的pi只有2.7.9/3.4.2(我只是sudo apt-get update/upgrade
-ed)。我也尝试过在程序中移动循环,但无论我把它放在哪里,它都会阻塞一切。
- 这是一个非阻塞(无限)循环我在找什么?
- 这是什么游戏/事件循环?
- 我可以使用多线程解决这个问题吗(只是好奇而不是限制,如果它是必须的)?
- 这是“设计”无限循环中的一个普遍问题吗?
- 我可以将此作为(反向?)竞争条件吗?我在考虑使用信号量作为某种工具来阻止,但我不确定。
见Python的[**'signal' **](https://docs.python.org/3/library/ signal.html)库 –
@PeterWood我正在看'signal',但认为这是过度杀伤,主要是操作系统的东西。但是,我不确定如何确定操纵杆发送的信号类型(如果有的话)。我将如何去确定这一点? – mhrvatin