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 :

Threading temporisation des appels


Sujet :

Python

  1. #1
    Membre très actif
    Avatar de Gecko
    Homme Profil pro
    Développeur décisionnel
    Inscrit en
    Décembre 2008
    Messages
    499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur décisionnel

    Informations forums :
    Inscription : Décembre 2008
    Messages : 499
    Par défaut Threading temporisation des appels
    Bonjour tout le monde!

    J'ai un petit problème avec ma gestion des Thread dans une classe que je dev. En gros j'ai la fonction onLoad() qui me sert à charger checkIn(). Checkin fait appel à Threading.Timer() pour être répétée toutes les 0.5 secondes. Le problème que j'ai c'est que le traitement lui peut durer plus longtemps en fonction du nombre de données à traiter.

    Du coup j'aimerai que Threading.Timer() fasse la relance qu'une fois le traitement fini, histoire de pas surcharger pour rien.

    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    import threading
     
    class autocheck(Plugin):
     
      def onLoad(self):
        self.cid = 21
        self.cll = {}
        self.checkIn()
     
      def checkIn(self):
        threading.Timer(0.5, self.checkIn).start()
        # traitement

    J'ai tenté de "tricher" en plaçant mon thred à la fin de ma fonction mais ça n'a pas fonctionné, je m'y attendait donc je ne suis pas déçu

    Faut savoir que c'est la première fois que j'utilise les thread, je dev "sérieusement" sous Python depuis 15 jours du coup j'ai encore du mal avec certains aspects du langage.

    Merci d'avance pour votre aide

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 683
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 683
    Par défaut
    Salut,

    checkin sera exécuté par le thread associé à Timer. Si vous voulez attendre que çà se termine, vous pouvez faire un .join.
    Exemple:
    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
    from threading import Timer
    import time
     
    def checkin():
        print ('checkin')
        time.sleep(1)
     
    def submit_checkin(count=5):
        for x in range(count):
            t = Timer(0.5, checkin)
            t.start() 
            t.join()
            print (x)
     
    submit_checkin()
    Ceci dit créer et détruire un thread pour faire çà, c'est "luxe"!
    Il serait quand même plus raisonnable de créer un thread qui lance checkin après avoir attendu 0.5 secondes: çà ne crée qu'un seul thread.

    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
    from threading import Thread
    import time
     
    def checkin():
        print ('checkin')
        time.sleep(1)
     
    def submit_checkin(count=5):
        for x in range(count):
            time.sleep(0.5)
            checkin()
            print (x)
     
    thread = Thread(target=submit_checkin)
    thread.start()
    thread.join()
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

Discussions similaires

  1. Comment stopper un thread qui fait des appels natifs ?
    Par khayyam90 dans le forum Général Dotnet
    Réponses: 7
    Dernier message: 04/01/2013, 10h30
  2. []Augmenter la taille de la pile des appels ?
    Par oncle ervil dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 10/05/2005, 09h29
  3. [Astuce][Thread]Utilisation des blocs synchronized
    Par Pill_S dans le forum Concurrence et multi-thread
    Réponses: 14
    Dernier message: 21/07/2004, 14h14
  4. Réponses: 3
    Dernier message: 11/02/2004, 12h50

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