总的来说,我试着解决一个简单的问题。 我尝试访问一个网站,如果发生错误(异常),它应该在延迟期后再尝试一次。整个代码嵌入在无限循环中,如果这可能是一个问题。我的第一次尝试是这样的:
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 :(得分: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也冻结了执行。