try: test_obj.mytest() except FunctionTimedOut as e: print('mytest2:::', e) print('finish test')
在 Windows 和 Linux 下输出相同:
1 2 3 4 5 6 7
Start 1 seconds have passed 2 seconds have passed 3 seconds have passed mytest2::: Function _mytest (args=(<__main__.TimeoutTest object at 0x7f5d9559f880>,)) (kwargs={}) timed outafter3.000000 seconds.
finish test
stopit
安装
1
pip install stopit
使用方法
引入包
1
import stopit
将装饰器装饰在需要控制时间的函数上,参数单位为秒,可以装饰类成员函数
1 2 3
@stopit.threading_timeoutable() defmytest(): pass
在被装饰的函数中输入参数 timeout 来控制时长,异常可以用 Exception 捕获
示例代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
import stopit import time import traceback
@stopit.threading_timeoutable() definfinite_loop(): # As its name says... try: print("Start") for i inrange(1, 10): print("%d seconds have passed" % i) time.sleep(1) except Exception as e: traceback.print_exc()
if __name__ == '__main__': infinite_loop(timeout=3) print('finish test')
在 Windows 和 Linux 下输出相同:
1 2 3 4 5 6 7 8 9 10
Start 1seconds have passed 2seconds have passed 3seconds have passed Traceback (most recent call last): File "timeout.py", line13, in infinite_loop time.sleep(1) stopit.utils.TimeoutException finish test