J'ai un pi de framboise avec un chapeau de sens. J'ai fait un binary clock que je veux afficher et garder à jour sur l'affichage du chapeau de Sense. Cependant, je veux la possibilité d'activer et de désactiver l'horloge avec le joystick au milieu. Tout fonctionne bien, mis à part la boucle de mise à jour de mon horloge qui bloque toute nouvelle entrée une fois démarrée.non-blocage boucle infinie
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
J'ai réfléchi à la façon de résoudre ce problème. Comment autoriser le script/l'horloge à continuer à fonctionner et à accepter de nouvelles actions depuis le joystick. Mais une fois que la boucle while commence, je suis coincé. Je ne suis pas sûr de quoi google pour. J'ai commencé à regarder async/await, mais cela semble être une fonctionnalité de Python 3.5+, et mon pi a seulement 2.7.9/3.4.2 (j'ai juste sudo apt-get update/upgrade
-ed). J'ai aussi essayé de faire bouger la boucle dans le programme, mais ça bloque tout, peu importe où je le place.
- Est-ce une boucle non-bloquante (infinie) que je cherche?
- Est-ce que une boucle événement jeu-/est?
- Puis-je résoudre ce avec l'aide de plusieurs threads (juste curieux, pas une limitation si elle est un must)?
- Est-ce un problème général dans « la conception » des boucles infinies?
- Puis-je aborder cela comme un (inverse?) Condition de course? Je pensais peut-être utiliser un sémaphore comme une sorte d'outil pour ne pas bloquer, mais je ne suis pas sûr.
Voir Python de [** 'signal' **] (https://docs.python.org/3/library/ signal.html) library –
@PeterWood Je regardais 'signal' mais je pensais que c'était trop, et surtout OS-stuff. Cependant, je ne suis pas sûr de savoir comment déterminer le type de signal que le joystick envoie, le cas échéant. Comment ferais-je pour le déterminer? – mhrvatin