2010-09-20 5 views
0

J'ai petit répéteur ci-dessous qui se termine, Comment réparer plus stable à partir de plantages, et ne pas arrêter de courir .... Je voudrais ajouter un battement de coeur à l'interface graphique pour voir que c'est toujours en cours d'exécution. Dans Wxpthon, ma barre de menu devient vide ou blanche.Répéteur multithread en Python

def TimerSetup(): 
     import threading, time 
     invl = 300 

     def dothis(): 
      try: 
       FetchUpdates() 
      except Exception as e: 
       pass 

     class Repeat(threading.Thread): 
      def run(self): 
       dothis() 

     if __name__ == '__main__': 
      for x in range(7000): 
       thread = Repeat(name = "Thread-%d" % (x + 1)) 
       thread.start() 
       time.sleep(invl) 

Répondre

0

Cela s'exécute pour 7000 itérations. Donc, si votre temps d'exécution est d'environ 7000 * 300 s, cela "fonctionne exactement comme codé" :-) Cependant, le nombre de threads ou ce que vous faites dans FetchUpdates pourrait être un problème. Y a-t-il un retraçage quand il s'arrête? Atteignez une limite d'utilisateur?

+0

Il n'y a pas de retraçage, arrête juste. mort. J'utilise un simple gui avec buttom, qui reste enfoncé, lors de la course. – Merlin

+0

quel est le code lorsque vous appuyez sur le bouton gui. Évidemment, il ne retourne pas – knitti

+0

en appuyant sur le bouton, exécute le minuteur. le code de minuterie exécute l'extraction d'Internet dans DB. puis refais. J'ai "essayer" code pour internet échouer, ne tire pas. ... retravailler - processus Internet ... – Merlin

0

vous semble besoin join() pour attendre le fil de départ

def TimerSetup(): 
     import threading, time 
     invl = 300 

     def dothis(): 
      try: 
       FetchUpdates() 
      except Exception as e: 
       pass 

     class Repeat(threading.Thread): 
      def run(self): 
       dothis() 

     if __name__ == '__main__': 
      for x in range(7000): 
       thread = Repeat(name = "Thread-%d" % (x + 1)) 
       thread.start() 
       thread.join() 
       time.sleep(invl) 
+0

pourquoi aurais-je besoin d'une jointure? – Merlin

+0

car vous devez attendre la fin de thread.start(), puis démarrez un nouveau thread et continuez. ou fil juste en train de commencer le fil sans fin ce qui provoque un accident –