最新要闻

广告

手机

iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?

iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?

警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案

警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案

家电

世界时讯:python超时处理方法eventlet的eventlet.Timeout

来源:博客园


【资料图】

一、前言

在使用python进行接口自动化测试、脚本编写、执行sql的时候,如果遇到以下问题的,都可以用eventlet.timeout这个方法。

  1. 执行下载数据的接口,数据量较大导致后面接口一直等待;
  2. 执行sql,sql数据因外界原因导致数据一直加载没查询出来;
  3. 编写抢票脚本,抢第一个条数据的时候,因接口并发较大,导致接口一直加载,没办法循环抢购其他数据;
  4. 有requests请求多久不反回结果,就跳过的场景;
  5. 有的场景指定时间反回才算有效的;
  6. 爬虫的时候,爬到某个数据,导致数据很久没返回,程序需要一直等待,没办法往下执行。

以上场景中,我们可以利用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 timeimport eventleteventlet.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都输出了

关键词: