2 回答
TA贡献1797条经验 获得超6个赞
解:
我刚刚修改了一个发布在这里的脚本:超时功能,如果需要太长时间才能完成。
这是代码:
from functools import wraps
import errno
import os
import signal
class TimeoutError(Exception):
pass
def timeout(seconds=10, error_message=os.strerror(errno.ETIME)):
def decorator(func):
def _handle_timeout(signum, frame):
raise TimeoutError(error_message)
def wrapper(*args, **kwargs):
signal.signal(signal.SIGALRM, _handle_timeout)
signal.setitimer(signal.ITIMER_REAL,seconds) #used timer instead of alarm
try:
result = func(*args, **kwargs)
finally:
signal.alarm(0)
return result
return wraps(func)(wrapper)
return decorator
然后您可以像这样使用它:
from timeout import timeout
from time import time
@timeout(0.01)
def loop():
while True:
pass
try:
begin = time.time()
loop()
except TimeoutError, e:
print "Time elapsed: {:.3f}s".format(time.time() - begin)
哪些印刷品
Time elapsed: 0.010s
TA贡献1884条经验 获得超4个赞
使用setitimer而不是警报解决了这个问题-现在可以将时间设置为浮动-而且我认为以完整的语法发布它并参考该答案会更加清楚。我不是要窃取某人的信誉。:-)
添加回答
举报