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 :

utilisation d'un threading, modifier la frequence d'appel [Python 2.X]


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 14
    Par défaut utilisation d'un threading, modifier la frequence d'appel
    Bonjour à tous,
    Je programme actuellement un "sequencer" à 8 pistes en pyhton. En fait c'est tout simplement un tableau booleen qui est lu avec un tempo(fréquence) précise.
    exemple : on lit la une case du tableau tous les 5ms puis on incrémente la position du tableau etc ...
    D'où l'utilisation d'un threading !
    Cependant, j'ai le souhait de modifier "le tempo en temps réel" qui a pour conséquence de modifier le temps d'appel de la fonction "lecture du tableau".
    et là je dois dire je ne sais pas faire, j'ai regardé plusieurs documents sur les threading en python mais aucun ne parle de modifier le temps d'appel de la fonction.
    D'une manière plus détaillée voici ce que j'aimerais :

    Tout d'abord voici la class que j'utilise (je l'ai prise quelque part sur le web)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    import threading
    import time
     
    class Intervallometre(threading.Thread):
     
        def __init__(self, duree, fonction, args=[], kwargs={}):
            threading.Thread.__init__(self)
            self.duree = duree
            self.fonction = fonction
            self.args = args
            self.kwargs = kwargs
            self.encore = True  # pour permettre l'arret a la demande
     
        def run(self):
            while self.encore:
                self.timer = threading.Timer(self.duree, self.fonction, self.args, self.kwargs)
                self.timer.setDaemon(True)
                self.timer.start()
                self.timer.join()
     
        def stop(self):
            self.encore = False  # pour empecher un nouveau lancement de Timer et terminer le thread
            if self.timer.isAlive():
                self.timer.cancel()  # pour terminer une eventuelle attente en cours de Timer
    le moment où je l'utilise (t est le temps d'appel de la fonction sequence_temps_réel)
    t= 60*1.0/(tempo*2)
    jouer = Intervallometre(t,sequence_temps_reel)
    jouer.setDaemon(True)
    jouer.start()

    En fait le tempo peut être modifié en temps réel, et là le t sera donc modifié et j'aimerais que cela modifie aussi la "jouer" sur la fréquence d'appel l

    Est ce possible ?
    Si oui comment ? Si non puis je utiliser autre chose pour le faire ?
    Merci d'avance à tous pour votre réponse.

  2. #2
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 307
    Par défaut
    Salut,

    Si tu modifies la valeur de duree de l'extérieur de la classe:
    ça devrait changer le tempo, non ?

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 14
    Par défaut
    merci VinsS, je vais essayer et je te tiens au courant.

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 14
    Par défaut Stopper reprendre un threading
    oui cela marche, bien. Merci encore Vincent !
    j'ai encore malgré tout une autre question :
    comment activer, stopper et reprendre un threading ?

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 14
    Par défaut
    j'ai essayé jouer.encore = true ou false (j'ai cru que True veut dire que le threading était activé, false, qu'il fait une pause)
    mais cela ne marche pas !

    Je voudrais en fait un jouer.pause() et un jouer.continuer() un truc de ce genre ....
    Merci pour vos réponse à tous

  6. #6
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 307
    Par défaut
    À ta place je ne toucherais pas au thread pour cela, laisse-le continuer sur son tempo et bloque plutôt la fonction appellée.

    Par exemple tu crées un flag paused et tu conditionnes l'exécution à ce flag.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    def sequence_temps_reel(args):
        if paused:
            return
     
        ... exécution
     
     
     
    paused = True # met en pause
    paused = False # relance la zique

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

Discussions similaires

  1. utilisation du Multi threading
    Par chti_juanito dans le forum Concurrence et multi-thread
    Réponses: 3
    Dernier message: 30/05/2006, 10h20
  2. [Thread] Modifier objet static depuis thread
    Par orelero dans le forum Concurrence et multi-thread
    Réponses: 4
    Dernier message: 19/04/2006, 17h09
  3. [JProgressBar] Utilisation d'un thread
    Par GLDavid dans le forum AWT/Swing
    Réponses: 5
    Dernier message: 16/01/2006, 11h17
  4. [C# 2.0][Form]Comment utiliser les Delegates & Threading
    Par Tips dans le forum Windows Forms
    Réponses: 8
    Dernier message: 08/01/2006, 14h22
  5. Réponses: 8
    Dernier message: 23/03/2005, 19h28

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