How to timeout function in python, timeout less than a second
问题说明:
我在搜索大量的日志文件行,并将这些行分配给组,以便使用
- 我正在使用的EDOCX1[1]是python的函数,正如我在stackoverflow上发现的那样(很抱歉,我现在找不到链接:—()。运行python的库很难中断线程。因此,线程不在游戏中。
- 因为评估
re.match 函数花费的时间相对较短,我想用这个函数分析大量的行,所以我需要一些执行时间不太长的超时函数(这使得线程更不合适,初始化新线程需要很长的时间),并且可以设置为小于一秒钟。出于这些原因,请在此处回答-函数调用超时如果用decorator(alarm-1sec等等)完成时间太长,那么here-timeout函数就不可用了。
今天上午我一直在寻找这个问题的解决办法,但没有找到任何令人满意的答案。
解决方案:
在"解决方案相比,不是这是复杂的,但我想,这是有用的,它可能会对一些其他人喜欢我hopelessly堆叠后这两个简单的解决方案是在这里。
在VC是一位在这里发布修改脚本超时功能:如果它需要太长的两个表面。
和这里的代码是:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | 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 |
然后你可以使用这样的信息:
1 2 3 4 5 6 7 8 9 10 11 12 | 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) |
这是我的照片
1 | Time elapsed: 0.010s |
希望,这将有益于人的:-)