私はセンセンスハットのラズベリーパイを持っています。私はを作成し、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
私はこれを解決する方法について考えてきました。スクリプト/クロックを実行したままで、ジョイスティックから新しいアクションを受け入れる方法。しかし、whileループが始まると、私は立ち往生しています。私はgoogleのために何がわからない。私はasync/awaitを調べ始めましたが、それは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)library –
@PeterWood私は 'signal'を見ていましたが、それが過度のものであり、主にOSのものだと思っていました。しかし、ジョイスティックが送信している信号の種類を判断する方法がわからない。これを決めるにはどうすればいいですか? – mhrvatin