python timeout(设置函数超时退出)

最近碰到一个场景

用opencv链接网络摄像头,但是摄像头的地址不一定是正确的,或者是打开的,当错误的时候会直接报错,但是当地址正确却没有打开,或者网络限制的时候,会等上半天才返回,并且不报错

???,这哪里行,我都用pthon了,还能不知道人生苦短嘛~
于是一顿操作猛如虎~好吧,多线程、信号量、巴拉巴拉,算了,还是问问度娘

然后看到了这个文章
https://www.cnblogs.com/sunshine-blog/p/12024820.html

python timeout(设置函数超时退出)_第1张图片
哇,这个页面很简单,是我喜欢的类型,果断一试~
(代码给大家贴出来~姑且一试)

import time
import timeout_decorator


@timeout_decorator.timeout(6)
def test():
    time.sleep(5)
    return 5


aaa = test()
print(aaa)

然鹅,理想是美好的,现实是骨感的。

报错信息

AttributeError: module 'signal' has no attribute 'SIGALRM'

python timeout(设置函数超时退出)_第2张图片
罢了,老夫再找找
(此方法留下,以后linux中用)

终于(其实也就看了两三个文章)让我找到一个一样简单的(还有好几个方法,我用那几个方法证明了我的懒~)

文章地址:https://zhuanlan.zhihu.com/p/39743129

代码如下:

import time
from func_timeout import func_set_timeout

@func_set_timeout(3)
def task():
    while True:
        print('hello world')
        time.sleep(1)

if __name__ == '__main__':
    task()

运行结果如下
python timeout(设置函数超时退出)_第3张图片
奈斯~ 是我想要的结果~

最后调用摄像头代码如下

import cv2
from func_timeout import func_set_timeout

@func_set_timeout(5)
def click_camera(in_url):
    cap = cv2.VideoCapture(in_url)
    return cap
in_url = input('camera_path:')
cap = click_camera(in_url)

ok
搞定~

你可能感兴趣的:(python小工具)