Bonjour,
j'aimerai savoir s'il est possible? et si oui
Comment faire pour créer un thread qui lit une pile de message et qui s'endort quand la pile est vide puis qui se réveille quand la pile se remplit.
Merci d'avance
Bonjour,
j'aimerai savoir s'il est possible? et si oui
Comment faire pour créer un thread qui lit une pile de message et qui s'endort quand la pile est vide puis qui se réveille quand la pile se remplit.
Merci d'avance
Salut,
Oui, c'est possible, les documentations abondent. En fait ton thread devrait ressembler à une boucle infinie qui teste si un message est arrivé. Si oui, elle le met dans un tampon circulaire, et si non elle s'endort (fonction sleep du module time) une milliseconde pour ne pas gaspiller de CPU.
A+
Pfeuh
Oui cependant le module threading et sa doc reste d'actualité.
Tu dois utiliser la class Event, ça permet de faire des interactions complexes entre les différents thread.
Par défaut un flag est à False, à toi de jouer là-dessus pour le faire bouger de False à True ou vice-versa.
Tu peux même jouer avec le temps, et la méthode wait (toujours de la classe Event), attention si l'argument timeout est absent, le thread est bloqué indéfiniment.
par exemple :
pile = 0 --> pile vide
si pile différent de 0
envoyer thread
c'est tout!
et un exemple de la classe Event, pas simple, si t'es débutant...
Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)
Ce que tu décris est un fonctionnement par interruption. Un message arrive, une interruption met le message dans la pile. C'est un fonctionnement événementiel, qui n'a rien à voir avec un thread.
Le thread, lui, simule ce fonctionnement du mieux qu'il peut et c'est très souvent suffisant. L'interruption hardware existe bel et bien, mais elle est inaccessible au programmeur. elle se contente généralement de positionner un flag ou d'incrémenter un compteur pour signaler qu'un message est arrivé. le thread fait du polling (boucle) sur la lecture de ce flag et met le message dans le tampon circulaire (ce n'est pas une pile, c'est first in first out). La technique du sleep est très efficace dans la plupart des cas où un temps de réaction de quelques millisecondes suffit. voici un algo simple de réception, qui garantit une optimisation maximale du temps de réponse:
Maintenant peut-être qu'il existe quelque chose qui fonctionne comme tu le souhaites mais que je ne connais pas, je vais suivre ce topic avec intérêt.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 tant que flag thread_actif vrai: tant que flag reception_message vrai: mettre message dans tampon dormir une milliseconde
Bonjour,
Je me suis amusé à faire des trucs comme ça: plusieurs threads qui envoient et traitent des messages sur, ce que j'ai appelé, un "tableau blanc", et ceci sans jamais s'arrêter. Mon tuto ici:
http://python.jpvweb.com/mesrecettes...d_tableaublanc.
Ces mécanismes sont très intéressants, parce qu'on entrevoit plein de développements possibles (simulation d'atelier, jeux, etc...).
Un expert est une personne qui a fait toutes les erreurs qui peuvent être faites, dans un domaine étroit... (Niels Bohr)
Mes recettes python: http://www.jpvweb.com
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager