非阻塞无限循环

Non-blocking infinite loop

我有一个 Raspberry pi 带 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

我一直在想怎么解决这个问题。如何让 script/clock 保持 运行 并仍然接受来自操纵杆的新操作。但是一旦 while 循环开始,我就卡住了。我不确定要 google 做什么。我已经开始研究 async/await,但这似乎是 Python 3.5+ 的功能,而我的 pi 只有 2.7.9/3.4.2(我只是 sudo apt-get update/upgrade-ed) .我也试过在程序中移动循环,但无论我把它放在哪里,它都会阻止一切。

我用全局变量解决了:

from sense_hat import SenseHat
from signal import pause

def show_clock():
    global clock_is_on

    while clock_is_on:  # clock-loop
        # clock-logic
        # ...

        events = sense.stick.get_events()

        for event in events:
            if event.direction == "middle" and event.action == "pressed":
              clock_is_on = False

        time.sleep(1) # only need to update clock once every second

def pushed_middle(event):
    if not clock_is_on:
        clock_is_on = True
        show_clock()

sense = SenseHat()

clock_is_on = False

sense.stick.direction_middle = pushed_middle
pause()