美文网首页
python requests 开启错误重试次数

python requests 开启错误重试次数

作者: jiaxiaolei | 来源:发表于2022-12-03 22:57 被阅读0次

通过tornado 启动一个web server
这里的get请求中sleep20秒,模拟一个耗时20秒的get请求

(base) [root@sltvb7v2wy3 jia_scripts]# cat start_tornado_server.py 

import asyncio
import logging
import time

import tornado.web
import tornado.options

class MainHandler(tornado.web.RequestHandler):
    def get(self):
        logging.info("get...")
        time.sleep(20)
        self.write("Hello, world")

    def post(self):
        body = self.request.body
        self.write("Hello, world")

def make_app():
    return tornado.web.Application([
        (r"/", MainHandler),
    ])

async def main():
    app = make_app()
    app.listen(8001)
    await asyncio.Event().wait()

if __name__ == "__main__":
    tornado.options.parse_command_line()
    logging.info("come into main")
    asyncio.run(main())

通过requests 设置max_retries
这里配置了最大重试次数为3。http请求的超时时间为10秒

(base) [root@sltvb7v2wy3 jia_requests]# cat test_requests.py 
import requests
from requests.adapters import HTTPAdapter
s = requests.Session()

s.mount('http://', HTTPAdapter(max_retries=3))
s.mount('https://', HTTPAdapter(max_retries=3))

#s.get('http://example.com', timeout=1)
res = s.get('http://127.0.0.1:8001', timeout=10)
print("res: ", res)

开启server:
(base) [root@sltvb7v2wy3 jia_scripts]# python start_tornado_server.py
[I 221203 22:39:47 start_tornado_server:34] come into main
[I 221203 22:40:00 start_tornado_server:10] get...
[I 221203 22:40:20 web:2239] 200 GET / (127.0.0.1) 20013.09ms  # 20秒后返回
[I 221203 22:40:20 start_tornado_server:10] get...
[I 221203 22:40:40 web:2239] 200 GET / (127.0.0.1) 20020.48ms  # 20秒后返回
[I 221203 22:40:40 start_tornado_server:10] get...
[I 221203 22:41:00 web:2239] 200 GET / (127.0.0.1) 20020.68ms # 20秒后返回
[I 221203 22:41:00 start_tornado_server:10] get...
[I 221203 22:41:20 web:2239] 200 GET / (127.0.0.1) 40040.85ms # 20秒后返回

启动test_requests.py

(base) [root@sltvb7v2wy3 jia_requests]# python test_requests.py
Traceback (most recent call last):
  File "/root/anaconda3/lib/python3.9/site-packages/urllib3/connectionpool.py", line 449, in _make_request
    six.raise_from(e, None)
  File "<string>", line 3, in raise_from
  File "/root/anaconda3/lib/python3.9/site-packages/urllib3/connectionpool.py", line 444, in _make_request
    httplib_response = conn.getresponse()
  File "/root/anaconda3/lib/python3.9/http/client.py", line 1377, in getresponse
    response.begin()
  File "/root/anaconda3/lib/python3.9/http/client.py", line 320, in begin
    version, status, reason = self._read_status()
  File "/root/anaconda3/lib/python3.9/http/client.py", line 281, in _read_status
    line = str(self.fp.readline(_MAXLINE + 1), "iso-8859-1")
  File "/root/anaconda3/lib/python3.9/socket.py", line 704, in readinto
    return self._sock.recv_into(b)
socket.timeout: timed out

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/root/anaconda3/lib/python3.9/site-packages/urllib3/connectionpool.py", line 703, in urlopen
    httplib_response = self._make_request(
  File "/root/anaconda3/lib/python3.9/site-packages/urllib3/connectionpool.py", line 451, in _make_request
    self._raise_timeout(err=e, url=url, timeout_value=read_timeout)
  File "/root/anaconda3/lib/python3.9/site-packages/urllib3/connectionpool.py", line 340, in _raise_timeout
    raise ReadTimeoutError(
urllib3.exceptions.ReadTimeoutError: HTTPConnectionPool(host='127.0.0.1', port=8001): Read timed out. (read timeout=10)

During handling of the above exception, another exception occurred:


Traceback (most recent call last):
  File "/root/anaconda3/lib/python3.9/site-packages/requests/adapters.py", line 489, in send
    resp = conn.urlopen(
  File "/root/anaconda3/lib/python3.9/site-packages/urllib3/connectionpool.py", line 815, in urlopen
    return self.urlopen(
  File "/root/anaconda3/lib/python3.9/site-packages/urllib3/connectionpool.py", line 815, in urlopen
    return self.urlopen(
  File "/root/anaconda3/lib/python3.9/site-packages/urllib3/connectionpool.py", line 815, in urlopen
    return self.urlopen(
  File "/root/anaconda3/lib/python3.9/site-packages/urllib3/connectionpool.py", line 787, in urlopen
    retries = retries.increment(
  File "/root/anaconda3/lib/python3.9/site-packages/urllib3/util/retry.py", line 592, in increment
    raise MaxRetryError(_pool, url, error or ResponseError(cause))
urllib3.exceptions.MaxRetryError: HTTPConnectionPool(host='127.0.0.1', port=8001): Max retries exceeded with url: / (Caused by ReadTimeoutError("HTTPConnectionPool(host='127.0.0.1', port=8001): Read timed out. (read timeout=10)"))

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/root/jia_study_python/jia_requests/test_requests.py", line 9, in <module>
    res = s.get('http://127.0.0.1:8001', timeout=10)
  File "/root/anaconda3/lib/python3.9/site-packages/requests/sessions.py", line 600, in get
    return self.request("GET", url, **kwargs)
  File "/root/anaconda3/lib/python3.9/site-packages/requests/sessions.py", line 587, in request
    resp = self.send(prep, **send_kwargs)
  File "/root/anaconda3/lib/python3.9/site-packages/requests/sessions.py", line 701, in send
    r = adapter.send(request, **kwargs)
  File "/root/anaconda3/lib/python3.9/site-packages/requests/adapters.py", line 565, in send
    raise ConnectionError(e, request=request)
requests.exceptions.ConnectionError: HTTPConnectionPool(host='127.0.0.1', port=8001): Max retries exceeded with url: / (Caused by ReadTimeoutError("HTTPConnectionPool(host='127.0.0.1', port=8001): Read timed out. (read timeout=10)"))

结果中可以看到,首次调用get方法,超时。
然后尝试了3次,都超时

扩展阅读

python requests 配置超时及重试次数
https://jiuaidu.com/jianzhan/972809/

相关文章

网友评论

      本文标题:python requests 开启错误重试次数

      本文链接:https://www.haomeiwen.com/subject/tmxpfdtx.html