2014-09-11 6 views
0

en général J'essaie de résoudre un problème simple. Je tente d'accéder à un site Web et si une erreur (exception) se produit, il devrait donner un autre essai après une période de retard. le code entier est intégré dans une boucle infinie, si cela peut être un problème. mon premier essai était quelque chose comme ceci:thread ne se termine pas/timeout

while 1 == 1 
    connected = False 
    while not connected: 
     try: 
      br.follow_link(l) 
      connected = True 
     except: 
      time.sleep(61) 

Mais à chaque fois une exception se produit, les gels et time.sleep (61) n'a jamais pris fin. je lis quelque chose sur les threads, et mis en œuvre les éléments suivants:

def sleeper(sec): 
    time.sleep(sec) 

while 1 == 1 
    connected = False 
    while not connected: 
     try: 
      br.follow_link(l) 
      connected = True 
     except: 
      t = Thread(target=sleeper, args=(61,)) 
      t.start() 
      t.join(62) 

Donc, fondamentalement le même concept, mais cette fois t.join (62) se termine jamais, même avec le délai d'attente de 62secs. Donc, je suis un peu perdu ici, parce que je ne peux pas résoudre mon problème simple. As tu des idées?

Répondre

0

Alors, je l'ai écrit script python petit test, et tout fonctionne comme prévu:

import threading 
import time 

class MyException(Exception): 
    pass 


def sleeper(sec): 
    print "In thread" 
    time.sleep(sec) 

def follow_link(): 
    raise MyException("My Error") 


while True: 
    connected = False 
    while not connected: 
     try: 
      follow_link() 
      connected = True 
     except Exception, e: 
      print e 
      t = threading.Thread(target=sleeper, args=(5,)) 
      t.start() 
      t.join(7) 

Mais je pense que cela ne de fait même chose que votre premier exemple de code, parce que (comme je vois dans débogueur) t.join gèle aussi l'exécution.

Questions connexes