Un petit problème dans une boucle infinie
Bonjour,
Je suis un débutant avec Python 3 et Raspberry 3 B+ et j’ai quelques difficultés avec ce petit programme.
Je voudrais que la boucle while s’arrête lorsque j’appuie sur CTRL+C.
Les deux fonctions suivantes ne servent que pour les essais.
La fonction Afficheur(Thread) comme son nom l’indique n’affiche que 10 fois le caractère ‘A’.
La fonction Essais_1(Thread) fait clignoter une led .
L’ensemble me permet d’essayer les threads.
Dans ce programme l’exception ne fonctionne pas et je ne vois pas pourquoi.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81
|
# -*- coding: utf-8 -*-
"""
Created on Mar Mai 22 10:30:36 2018
@author: mandrin
"""
import os
import random
import sys
from threading import Thread
import datetime
import time
import RPi.GPIO as GPIO #++
# broches GPIO
GPIO.setmode(GPIO.BCM) #++ GPIO21= broche 40
GPIO.setup(20, GPIO.OUT, initial=GPIO.LOW)# broche 38 LED #++
class Afficheur(Thread):
"""Thread chargé simplement d'afficher une lettre dans la console."""
def __init__(self, lettre):
Thread.__init__(self)
self.lettre = lettre
def run(self):
"""Code à exécuter pendant l'exécution du thread."""
i = 0
while i < 20:
sys.stdout.write(self.lettre)
sys.stdout.flush() # affichage immediat
attente = 0.2
attente += random.randint(1, 60) / 100 # attente aleatoire de 0.2 a 0.8 s
time.sleep(attente)
i += 1
# fin de Afficheur
# allumage d'une LED ==========================================================
class Essais_1(Thread):
def __init__(self):
Thread.__init__(self)
def run(self):
date=datetime.datetime.now() #*-*
second_old=date.second+1 #*-*
while 1:
try:
date=datetime.datetime.now() #*-*
secs=int(date.second) #*-*<
Led=date.microsecond/1e6
# commande de la LED toute les secondes (0.5s allumee, 0.5s eteinte)
if Led<=0.5:
GPIO.output(20,GPIO.LOW)# LED allumee #++
pass # equiv a nop
else:
GPIO.output(20,GPIO.HIGH)# LED eteinte #++
pass # equiv a nop
if secs==second_old:
print('secs->',secs) #*/*
second_old+=1
if second_old==60:
second_old=0
except KeyboardInterrupt:
GPIO.cleanup()
thread_2.join()
break
# fin de while 1 =============================================================
thread_2 = Essais_1()
thread_3 = Afficheur("A")
# Lancement des threads
thread_2.start()
thread_3.start()
# Attend que les threads se terminent
thread_2.join()
thread_3.join() |
Si quelqu'un voit pourquoi je suis preneur.
Merci d’avance
Cordialement