2014-09-11 36 views
0

一般来说我试图解决一个简单的问题。 我尝试访问一个网站,如果发生错误(例外),它应该延迟一段时间后再次尝试。如果这可能是一个问题,那么整个代码就会嵌入到无限循环中。我的第一次尝试是这样的:线程没有结束/超时

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

但每次发生异常冻结和time.sleep(61)永不结束。 我读一些有关线程,并执行以下操作:

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) 

所以基本上相同的概念,但这次t.join(62)永远不会终止,即使62secs的超时。所以我在这里有点失落,因为无法解决我的简单问题。你有什么想法?

回答

0

所以,我写了小试python脚本,一切都按预期工作:

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) 

但我想,这确实事实上同样的事情,你的第一个示例代码,因为(我在调试器中看到)t.join也冻结了执行。