python自学大数据 爬虫Python AI SqlPython爬虫作业

Python3函数限时运行/超时停止

2018-01-24  本文已影响326人  xkang

0 问题引入

最近写了爬虫并封装成了一个实时服务api接口,但是爬虫需要大概20s-30s才能完成,而且超时造成的失败也不能很快的反馈给客户端。
通过查看一些资料和与他人讨论有以下几种方式可以解决这个问题:

1 信号量机制的坑

在python里使用信号量需要引入内置的signal包,但是信号量机制是依托于操作系统的,所以网上一些示例代码在windows环境下运行会报错!!!
所以代码的调试必须转动Linux下,为了不(bu)重复(xie)造轮子(daima),这里要隆重介绍超时装饰器包timeout-decorator

2 timeout-decorator包

观察了timeout-decorator包的定时器实现,发现也是基于装饰器和信号量机制实现。

pip install timeout-decorator
import time
import timeout_decorator

@timeout_decorator.timeout(3)
def mytest():
    time.sleep(5)
    return 5
mytest()

上面的代码超时设置为3s,运行后会抛出TimeoutException。

import time
import timeout_decorator

@timeout_decorator.timeout(3, use_signals=False)
def mytest():
    time.sleep(5)
    return 5
mytest()

在其他地方使用超时函数时记得要加上try except语句捕获异常并做相应处理

3 参考

timeout-decorator 0.4.0

上一篇 下一篇

猜你喜欢

热点阅读