为什么“请求”模块超时在python3中不起作用?

亚伯拉罕

我想获取URL的内容,如果遇到50XHTTP错误代码,请重试10次,重试之间延迟0.5秒。我也想为我的请求设置1秒钟的超时时间。为了实现这个目标,我尝试了以下程序:

#!/usr/bin/python3

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

URL = "http://<DOMAIN>/Loader.aspx?ParTree=15131H&i=" # + stockid


def get_data(stockid):

    print("1")
    req_session = requests.Session()

    print("2")
    retries = Retry(total = 10, 
                    backoff_factor = 0.5,
                    status_forcelist = [500, 502, 503, 504])

    print("3")
    req_session.mount("http://", HTTPAdapter(max_retries=retries))

    print("4")
    page_content = req_session.get(URL + stockid, timeout=1).content

    print("5")

get_data(sys.argv[1])

不幸的是,它在屏幕上打印4后冻结了几分钟。怎么了?

约书亚·瓦吉斯(Joshua Varghese)

首先,我是Windows用户。你的timeout工作很好。在这里backoff_factor创建问题。尝试:

#!/usr/bin/python3

import sys
import requests
from requests.packages.urllib3.util.retry import Retry # requests.packages. is not necessary
from requests.adapters import HTTPAdapter    

URL = "http://<DOMAIN>/Loader.aspx?ParTree=15131H&i=" # + stockid


def get_data(stockid):

    print("1")
    req_session = requests.Session()

    print("2")
    retries = Retry(total = 10, 
                    backoff_factor = 0.5,
                    status_forcelist = [500, 502, 503, 504])
    requests.packages.urllib3.util.Retry.BACKOFF_MAX = 0.5 # required
    # requests.packages. is not necessary
    # it isin't necessary you have to mount this way
    print("3")
    adapter = HTTPAdapter(max_retries=retries)
    req_session.mount('http://', adapter)
    req_session.mount('https://', adapter)

    print("4")
    page_content = req_session.get(URL + stockid, timeout=1).content

    print("5")

get_data(sys.argv[1])

这种方式也是可能的:

retries = RetryRequest(
        total=10,
        backoff_factor=0.5,
        status_forcelist=[500, 502, 503, 504],
        max_backoff=backoff_factor)

据记录,当您使用时backoff_factor

它永远不会超过Retry.BACKOFF_MAX(默认情况下120)。

因此,当您尝试链接时,将BACKOFF_MAX优先于backoff_factor,这会增加执行时间。因此,设置:

requests.packages.urllib3.util.Retry.BACKOFF_MAX = 0.5

会帮助你。
但是由于定义为:

min(self.BACKOFF_MAX, backoff_value)

在:

urllib3.util.retry

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

为什么超时在bash脚本中不起作用?

为什么发布请求在gin golang中不起作用?

Golang为什么此超时方案不起作用?

Python3:为什么__spec__起作用?

为什么.each()在D3中不起作用?

Python计划模块在Python 3中不起作用

为什么(* 3)`map`(+100)在Idris中不起作用?

为什么参数multi在mongo请求中不起作用?

为什么重写模块在.htaccess中不起作用

为什么/ copy在ILE模块中不起作用

导入后,模块who在Python 3中也不起作用

为什么我的cURL请求在XAMPP中不起作用?

模块调用模块不起作用。为什么?

Python:为什么缺陷查找器模块在cmd Windows中不起作用?

动态模块导入在python中不起作用-为什么不呢?

pwntools Python模块在python2中不起作用,但在python3中起作用

为什么单词边界在python3中不起作用?

为什么相对导入在Python 3中不起作用?

Python3请求-不起作用

为什么发送 post 请求在 python 中不起作用?

为什么python3中的round()内置函数对我不起作用?

为什么我的 Python 3 代码不起作用?

unicode 方法在 Python3 中不起作用

为什么请求在 laravel 中不起作用,但在 pgAdmin 中起作用?

为什么python3中的循环索引递减不起作用?

为什么 Python3 的以下列表计数方法不起作用。?

为什么这种使用 Python 中的 Turtle 模块检测按键的方法不起作用?

Python dis 模块在 Python 3 中不起作用

为什么我的网页抓取工具不起作用?Python3 - 请求,BeautifulSoup