IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

Python et le multi threading?


Sujet :

Python

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 24
    Points : 27
    Points
    27
    Par défaut Python et le multi threading?
    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

  2. #2
    Membre expérimenté
    Profil pro
    Développeur en systèmes embarqués retraité
    Inscrit en
    Mars 2006
    Messages
    946
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2006
    Messages : 946
    Points : 1 351
    Points
    1 351
    Par défaut
    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

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 24
    Points : 27
    Points
    27
    Par défaut
    Citation Envoyé par pfeuh Voir le message
    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
    Merci de la réponse
    je pense que la time.sleep() n'est pas tout à fait ce que je souhaite
    ce que je voudrais faire c'est que le thread soit en pause et que lorsque qu'un item est ajouté à la pile le thread reparte (et non qu'il fasse une boucle infinie)

  4. #4
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 823
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 823
    Points : 7 119
    Points
    7 119
    Par défaut
    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)

  5. #5
    Membre expérimenté
    Profil pro
    Développeur en systèmes embarqués retraité
    Inscrit en
    Mars 2006
    Messages
    946
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2006
    Messages : 946
    Points : 1 351
    Points
    1 351
    Par défaut
    Citation Envoyé par Linux44 Voir le message
    ce que je voudrais faire c'est que le thread soit en pause et que lorsque qu'un item est ajouté à la pile le thread reparte (et non qu'il fasse une boucle infinie)
    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:

    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
    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.

  6. #6
    Expert éminent
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 462
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 462
    Points : 9 249
    Points
    9 249
    Billets dans le blog
    6
    Par défaut
    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

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Multi Threads en Python
    Par PyNub dans le forum Général Python
    Réponses: 7
    Dernier message: 31/01/2014, 11h00
  2. Problème Multi thread Python 3.2
    Par SmithC dans le forum Général Python
    Réponses: 5
    Dernier message: 03/05/2011, 10h48
  3. Tri multi-threadé
    Par Tifauv' dans le forum C
    Réponses: 8
    Dernier message: 28/06/2007, 09h00
  4. Effectuer du multi THREAD en python
    Par parp1 dans le forum Général Python
    Réponses: 3
    Dernier message: 10/05/2006, 12h56
  5. [Kylix] exception qtinft.dll et multi-threading
    Par leclaudio25 dans le forum EDI
    Réponses: 3
    Dernier message: 27/03/2003, 18h09

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo