Magazine

python, thread et la classe Event

Publié le 26 mai 2008 par Mikebrant

Un court article pour changer sur la classe Event .

Pouvoir démarrrer un thread seulement quand une action s'est effectuée est assez utile.

C'est pourquoi la classe Event existe.

Comme dans l'article précédent, on va prendre un exemple pour apprendre, et c'est super simple.

Mr ToutLeMonde est dans sa voiture, il écoute la radio .
Les chansons s'enchainent, et pourtant elles sont toutes aussi pourries, et oui Mr ToutLeMonde attend sa chanson : évènement .
Et quand sa chanson passe, il se met à chanter ( comme tout le monde ) .
Voici donc le code :

#-*- coding:Utf-8 -*-
from threading import Thread,Event
import time,random
chansonFavorite = Event()
#L'évènement
chansons=('un truc à 2 balles','de la pub','de la pub','toujours de la pub',"... c'est même pas de la musique ca....",'un truc à 2 balles','... sans commentaire...','la merveilleuse chanson')
#le tuple contenant les différents trucs pouvant passer à la radio
class Radio(Thread):
  
   def __init__(self):
      Thread.__init__(self)
     
   def run(self):
      allume = True
      print("La radio est allumé")
      while allume :
      chanson = random.randint(0,7)
         print("La radio passe : " + chansons[chanson])
  
   if chanson!=7:
   #si la chanson n'est pas la bonne
   time.sleep(1)
   #on l'écoute tout de même
   else :
   chansonFavorite.set()
   #si c'est la bonne, MrToutLeMonde la reconnait..
   time.sleep(2)
  
   chansonFavorite.clear()        
   #une fois terminé, une autre chanson pourrie passe
  
   allume = False
   #il en a marre d'écouter de la **** après une si belle chanson
     
      print("La radio est éteinte")  
     
class MrToutLeMonde(Thread):
  
   def __init__(self):
   Thread.__init__(self)
  
  
   def run(self):
   print("MrToutLeMonde allume la radio")
   chansonFavorite.wait()
   #il attend que sa chanson favorite passe
  
   print("##### MrToutLeMonde Chante comme s'il devait mourir demain, chante comme si plus rien n'avait d'importante #####")
   time.sleep(1)
   print("MrToutLeMonde éteint la radio")
  
  
if __name__=='__main__':
   maRadio=Radio()
   personneNormale = MrToutLeMonde()
   print("Mr ToutLeMonde monte dans sa voiture")
  
   personneNormale.start()
   maRadio.start()


Voilà, c'est pas bien compliqué, n'est-ce pas ?
MrToutLeMonde monte dans sa voiture, il allume la Radio .
Ensuite, il attend impatiemment sa chanson ( de bon matin ca fait du bien ) via la méthode wait() de cette dernière :
chansonFavorite.wait([temps]) : attend que sa chanson passe, avant de chanter, c'est à dire que tant que l'évènement ne vaut pas True, le thread attendra avant de continuer .
Si temps (en s) est spécifié,le thread attendra au plus temps avant de continuer .
La Radio passe des titres, des pubs, et lorsque la chansonFavorite passe alors MrToutLeMonde chante, il a été averti par la méthode set() de sa chansonFavorite :
chansonFavorite.set() : annonce à  MrToutLeMonde qu'elle passe, c'est à dire que l'évènement vaut True . 

Une fois la chanson passée, il est normal qu'une autre chanson, pourrie de surcroît, passe, MrToutLeMonde ne chante donc plus, il a été averti par la méthode clear() de sa chansonFavorite :
chansonFavorite.clear() : annonce à  MrToutLeMonde qu'elle ne passe plus, c'est à dire que l'évènement vaut False .

Enfin, MrToutLeMonde finit par éteindre la radio .
Voilà c'est terminé, en espérant que ca vous a plu.


Retour à La Une de Logo Paperblog

LES COMMENTAIRES (1)

Par quiscoul
posté le 15 septembre à 21:30
Signaler un abus

Enorme !!

C'est le meilleur tuto que j'aie jamais lu et de loin ! Rédigé comme une news de dafuckingblueboy :)

A propos de l’auteur


Mikebrant 9 partages Voir son profil
Voir son blog

l'auteur n'a pas encore renseigné son compte l'auteur n'a pas encore renseigné son compte