我会推荐阅读这篇文章Timeout function if it takes too long to finish。
它的要点是你可以使用信号来中断代码并产生一个错误,然后你就可以捕获它。
在您例如:
def _handle_timeout(signum,frame):
raise TimeoutError("Execution timed out")
driver.get("url")
signal.signal(signal.SIGALRM, _handle_timeout)
while True:
try:
signal.alarm(<timeout value>)
<operation>
signal.alarm(0)
except:
driver.refresh()
你可以用下面的代码片段测试:
import time
import signal
def _handle_timeout(signum,frame):
raise TimeoutError("Execution timed out")
def test(timeout,execution_time):
signal.signal(signal.SIGALRM, _handle_timeout)
try:
signal.alarm(timeout)
time.sleep(execution_time)
signal.alarm(0)
except:
raise
else:
print "Executed successfully"
这将提高时错误execution_time > timeout
。
正如Python signal don't work even on Cygwin?中所述,上述代码在Windows机器上不起作用。
请参阅:http://stackoverflow.com/questions/8616630/time-out-decorator-on-a-multprocessing-function – ebarr