Window或linux

1.eventlet

pip install eventlet

刚开始在ubuntu上使用此命令无法安装成功,我试过多次。

后来在github上进行操作查找到https://github.com/eventlet/eventlet

sudo pip install -U eventlet在另一台ubuntu系统的机器上很快就安装成功了,在docker中也能安装成功。

import eventlet
import time
eventlet.monkey_patch()
with eventlet.Timeout(2,False):
     print(1)
     time.sleep(1.5)
     print(2)
     time.sleep(1)
     print(3)
print(4)

 #结果为:
  #  1
  #  2
  #  4

使用参考链接:

https://blog.csdn.net/zjshui/article/details/78874621

https://blog.csdn.net/weixin_33875839/article/details/87163082

https://blog.csdn.net/youyou1543724847/article/details/71404145

 

Linux

2.signal

通过signal模块信号机制来控制语句执行时间,不能常用在windows下,常使用在linux下。

import time
import signal
 
def abc():
#最多执行时间为2s
    print(1)
    time.sleep(1.5)
    print(2)
    time.sleep(1)
    print(3)
 
#超时的回调函数
def myHandler(signum, frame):
  print("执行超时")
  exit()
 
signal.signal(signal.SIGALRM, myHandler)
#定时2秒,超时则执行回调函数
signal.alarm(2)
abc()
print(4)
 
#结果为:
#1
#2
#执行超时

上面的是程序整体执行时间控制,所以超时后不论语句在哪都不会执行
参考链接:

https://blog.csdn.net/weixin_33875839/article/details/87163082

https://blog.csdn.net/imnisen1992/article/details/53192389
https://blog.csdn.net/jinixin/article/details/80383177?utm_source=blogxgwz4
https://www.jianshu.com/p/c8edab99173d
https://blog.csdn.net/zelinhehe/article/details/77529844


3.timeout-decorator

pip install time-decorator
装饰器使用,超时即报错,可以捕捉异常处理,但也基于信号机制,不能常用在windows下,常使用在linux下。

 

import time
import timeout_decorator
 
@timeout_decorator.timeout(2)
def abc():
#最多执行时间为2s
    print(1)
    time.sleep(1.5)
    print(2)
    time.sleep(1)
    print(3)
 
try:
    abc()
except:
    pass
print(4)
 
#结果为:
#1
#2
#4

参考链接:

https://blog.csdn.net/weixin_33875839/article/details/87163082

https://www.jianshu.com/p/a7fc98c7af4d
https://www.cnblogs.com/fengmk2/archive/2008/08/30/python_tips_timeout_decorator.html
 

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐