Installation
From source code:
python setup.py install
From pypi:
pip install timeout-decorator
Usage
import time
import timeout_decorator
@timeout_decorator.timeout(5)
def mytest():
print("Start")
for i in range(1,10):
time.sleep(1)
print("{} seconds have passed".format(i))
if __name__ == '__main__':
mytest()
指定超时引发的异常
import time
import timeout_decorator
@timeout_decorator.timeout(5, timeout_exception=StopIteration)
def mytest():
print("Start")
for i in range(1,10):
time.sleep(1)
print("{} seconds have passed".format(i))
if __name__ == '__main__':
mytest()
Multithreading
在默认情况下,timeout-decorator使用信号来限制给定函数的执行时间。
如果您的函数不在主线程中执行(例如,如果它是Web应用程序的工作线程),则此配置不起作用。
在这种情况下使用多进程来作为超时替代策略。
要使用它,只需将use_signals = False
传递给超时装饰器函数:
import time
import timeout_decorator
@timeout_decorator.timeout(5, use_signals=False)
def mytest():
print "Start"
for i in range(1,10):
time.sleep(1)
print("{} seconds have passed".format(i))
if __name__ == '__main__':
mytest()
Warning
确保在多处理策略超时的情况下,您的函数不会返回无法被pickle的对象,否则它将在主进程和子进程之间进行编组时失败。
应用实例:
在5号站点
网友评论