2 回答

TA貢獻(xiàn)1797條經(jīng)驗(yàn) 獲得超6個(gè)贊
解:
我剛剛修改了一個(gè)發(fā)布在這里的腳本:超時(shí)功能,如果需要太長時(shí)間才能完成。
這是代碼:
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貢獻(xiàn)1884條經(jīng)驗(yàn) 獲得超4個(gè)贊
使用setitimer而不是警報(bào)解決了這個(gè)問題-現(xiàn)在可以將時(shí)間設(shè)置為浮動(dòng)-而且我認(rèn)為以完整的語法發(fā)布它并參考該答案會(huì)更加清楚。我不是要竊取某人的信譽(yù)。:-)
添加回答
舉報(bào)