线程没有结束/超时

时间:2014-09-11 08:54:37

标签: python multithreading sleep

总的来说,我试着解决一个简单的问题。 我尝试访问一个网站,如果发生错误(异常),它应该在延迟期后再尝试一次。整个代码嵌入在无限循环中,如果这可能是一个问题。我的第一次尝试是这样的:

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。所以我在这里有点迷失,因为无法解决我的简单问题。你有什么想法吗?

1 个答案:

答案 0 :(得分: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也冻结了执行。