python超时处理方法eventlet的eventlet.Timeout
Posted z天赐
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python超时处理方法eventlet的eventlet.Timeout相关的知识,希望对你有一定的参考价值。
一、前言
在使用python进行接口自动化测试、脚本编写、执行sql的时候,如果遇到以下问题的,都可以用eventlet.timeout这个方法。
- 执行下载数据的接口,数据量较大导致后面接口一直等待;
- 执行sql,sql数据因外界原因导致数据一直加载没查询出来;
- 编写抢票脚本,抢第一个条数据的时候,因接口并发较大,导致接口一直加载,没办法循环抢购其他数据;
- 有requests请求多久不反回结果,就跳过的场景;
- 有的场景指定时间反回才算有效的;
- 爬虫的时候,爬到某个数据,导致数据很久没返回,程序需要一直等待,没办法往下执行。
以上场景中,我们可以利用eventlet.timeout这个方法进行跳过,能提高我们的代码可靠性,健壮性。
二、使用方法
2.1、安装
安装: pip install eventlet
2.2、代码中引用
import eventlet
:
2.3、代码中使用
使用方法:在你觉得可能会超时的代码外层,使用下with eventlet.Timeout(3秒,False):
当with eventlet.Timeout(3秒,False): 下的代码执行超过3秒了,则直接跳过,如果3s内执行完了,则忽略
import time import eventlet eventlet.monkey_patch() #必须要加这段代码,引用下path #场景一:超时跳过 with eventlet.Timeout(3, False): # 等待3秒,如果3秒内第8-9行代码执行没有执行完,则跳过,直接去执行第10行 time.sleep(4) # 等待4秒 print(\'结果1\') # 因为等待了4秒,大于超时时间,所以’结果1‘不打印 print(\'结果2\') #场景2:没有超时 with eventlet.Timeout(3, False): # 等待3秒,如果3秒内第17-18行代码执行没有执行完,则跳过,直接去执行第10行 time.sleep(2) # 等待2秒 print(\'结果3\') # 因为等待了2秒,小于超时时间,所以’结果3‘也会打印 print(\'结果4\')
2.4 根据2.3代码执行的结果分析
#执行结果 结果2 结果3 结果4
场景1:结果1没有执行是因为eventlet.Timeout(3,False)设置的是3秒超时,他下面的代码sleep了4秒,直接跳过,输出了结果2
场景2:因为eventlet.Timeout(3,False)设置的是3秒超时,他下面的代码sleep了2秒,那么结果3、4都输出了
以上是关于python超时处理方法eventlet的eventlet.Timeout的主要内容,如果未能解决你的问题,请参考以下文章
Python/Erlang:Twisted、Stackless、Greenlet、Eventlet、协程有啥区别?它们是不是类似于 Erlang 进程?