我有一個帶有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