通过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/
网友评论