尝试更快地捕获Python

时间:2018-07-31 17:41:52

标签: python api compiler-errors runtime try-catch

我正在创建一个尝试调用api的尝试,并设置了except以捕获可能发生的任何错误。但是,该程序在try部分停留了大约一分钟。有没有办法让代码在服务器上放弃,并在更短的时间内选择除外路径?

编辑:这是代码

url = "http://10.10.120.48:8080/api/GetChannelList?pageSize=100&pageIndex=0"
try:
    rsp = requests.get(url)
except:
    #error message

1 个答案:

答案 0 :(得分:0)

我假设您正在使用请求模块。 “ rsp = requests.get(url)”行实际上是在进行其余的api调用。默认情况下,该调用会有一定的延迟,执行时间可能会因多个变量而异,而没有其他信息,将它们全部探索毫无意义。您所寻找的不仅仅是为正在构建的请求会话对象调整HTTPAdapter。 首先,进行导入:

import requests
from requests.adapters import HTTPAdapter
from requests.packages.urllib3.util.retry import Retry

然后在HTTPAdapter对象中构建一个重试对象以用于max_retries字段。请注意connect和back_off因子,其中有您感兴趣的值。注意*这是可选的,您可以简单地构建适配器并将其传递给max_retries一个int值。

retry = Retry(connect=3, backoff_factor=0.5)
adapter = HTTPAdapter(max_retries=retry)

然后,您无需进行简单的get调用,而是实例化一个请求会话,然后将其挂载。不用担心使用'http://'挂载,如果您希望我建议阅读下面的docs ...链接,可以稍后进行更改

reqObj = requests.Session()
reqObj.mount('http://', adapter)

最后,您可以使用实例化的会话对象发出get请求。 “响应”将保存与“ rsp”变量相同的数据

response = reqObj.get(Url)

要复制和粘贴的整个代码段都在下面;)。我建议查看文档中的请求,他们在这里讨论了会话和高级用法。 http://docs.python-requests.org/en/master/user/advanced/

import requests
from requests.adapters import HTTPAdapter
from requests.packages.urllib3.util.retry import Retry

Url = 'http://CoolApiDomain'

retry = Retry(connect=3, backoff_factor=0.5)
adapter = HTTPAdapter(max_retries=retry)
reqObj = requests.Session()
reqObj.mount('http://', adapter)

response = reqObj.get(Url)