
解释python requests包的timeout
哈哈哈。。。。垃圾python又来了。
·
解释python requests包的timeout
哈哈哈。。。。垃圾python又来了
1 问题
你能看懂下面两个timeout的含义就不用看下面的内容了。
requests.get('http://example.com', timeout=(2, 5))
requests.get('http://127.0.0.1:5000/api',timeout=1)
2 结论
- 一个参数:
requests.get('http://127.0.0.1:5000/api',timeout=1)
是连接或者读超时的时间,也就是timeout=(1, 1)
- 两个参数:
requests.get('http://example.com', timeout=(2, 5))
,连接超时的时间2s,读超时时间5s。
2.1 ConnectTimeout
-连接https://hub.docker.com/
超时的案例
>>> requests.get('https://hub.docker.com/',timeout=1)
Traceback (most recent call last):
File "/Users/admin/miniforge3/lib/python3.12/site-packages/urllib3/connection.py", line 198, in _new_conn
sock = connection.create_connection(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/admin/miniforge3/lib/python3.12/site-packages/urllib3/util/connection.py", line 85, in create_connection
raise err
File "/Users/admin/miniforge3/lib/python3.12/site-packages/urllib3/util/connection.py", line 73, in create_connection
sock.connect(sa)
TimeoutError: timed out
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/Users/admin/miniforge3/lib/python3.12/site-packages/urllib3/connectionpool.py", line 793, in urlopen
response = self._make_request(
^^^^^^^^^^^^^^^^^^^
File "/Users/admin/miniforge3/lib/python3.12/site-packages/urllib3/connectionpool.py", line 491, in _make_request
raise new_e
File "/Users/admin/miniforge3/lib/python3.12/site-packages/urllib3/connectionpool.py", line 467, in _make_request
self._validate_conn(conn)
File "/Users/admin/miniforge3/lib/python3.12/site-packages/urllib3/connectionpool.py", line 1099, in _validate_conn
conn.connect()
File "/Users/admin/miniforge3/lib/python3.12/site-packages/urllib3/connection.py", line 616, in connect
self.sock = sock = self._new_conn()
^^^^^^^^^^^^^^^^
File "/Users/admin/miniforge3/lib/python3.12/site-packages/urllib3/connection.py", line 207, in _new_conn
raise ConnectTimeoutError(
urllib3.exceptions.ConnectTimeoutError: (<urllib3.connection.HTTPSConnection object at 0x1065f8bc0>, 'Connection to hub.docker.com timed out. (connect timeout=1)')
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/Users/admin/miniforge3/lib/python3.12/site-packages/requests/adapters.py", line 486, in send
resp = conn.urlopen(
^^^^^^^^^^^^^
File "/Users/admin/miniforge3/lib/python3.12/site-packages/urllib3/connectionpool.py", line 847, in urlopen
retries = retries.increment(
^^^^^^^^^^^^^^^^^^
File "/Users/admin/miniforge3/lib/python3.12/site-packages/urllib3/util/retry.py", line 515, in increment
raise MaxRetryError(_pool, url, reason) from reason # type: ignore[arg-type]
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
urllib3.exceptions.MaxRetryError: HTTPSConnectionPool(host='hub.docker.com', port=443): Max retries exceeded with url: / (Caused by ConnectTimeoutError(<urllib3.connection.HTTPSConnection object at 0x1065f8bc0>, 'Connection to hub.docker.com timed out. (connect timeout=1)'))
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/Users/admin/miniforge3/lib/python3.12/site-packages/requests/api.py", line 73, in get
return request("get", url, params=params, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/admin/miniforge3/lib/python3.12/site-packages/requests/api.py", line 59, in request
return session.request(method=method, url=url, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/admin/miniforge3/lib/python3.12/site-packages/requests/sessions.py", line 589, in request
resp = self.send(prep, **send_kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/admin/miniforge3/lib/python3.12/site-packages/requests/sessions.py", line 703, in send
r = adapter.send(request, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/admin/miniforge3/lib/python3.12/site-packages/requests/adapters.py", line 507, in send
raise ConnectTimeout(e, request=request)
requests.exceptions.ConnectTimeout: HTTPSConnectionPool(host='hub.docker.com', port=443): Max retries exceeded with url: / (Caused by ConnectTimeoutError(<urllib3.connection.HTTPSConnection object at 0x1065f8bc0>, 'Connection to hub.docker.com timed out. (connect timeout=1)'))
>>>
2.2 ReadTimeout
-读超时的案例
(base) ~/ cat python ss.py
cat: python: No such file or directory
from flask import Flask, request, jsonify
import time
app = Flask(__name__)
@app.route('/api', methods=['POST','GET'])
def api():
time.sleep(2)
# 在这里处理数据,例如:
result = {'message': 'Hello, World!'}
return jsonify(result)
if __name__ == '__main__':
app.run(debug=True)
(base) ~/ cat ss.py
from flask import Flask, request, jsonify
import time
app = Flask(__name__)
@app.route('/api', methods=['POST','GET'])
def api():
time.sleep(2)
# 在这里处理数据,例如:
result = {'message': 'Hello, World!'}
return jsonify(result)
if __name__ == '__main__':
app.run(debug=True)
(base) ~/
(base) ~/
(base) ~/
(base) ~/ python ss.py
* Serving Flask app 'ss'
* Debug mode: on
WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead.
* Running on http://127.0.0.1:5000
Press CTRL+C to quit
* Restarting with stat
* Debugger is active!
* Debugger PIN: 118-547-680
127.0.0.1 - - [25/Sep/2024 19:03:55] "GET /api HTTP/1.1" 200 -
127.0.0.1 - - [25/Sep/2024 19:04:05] "GET /api HTTP/1.1" 200 -
>>> requests.get('http://127.0.0.1:5000/api',timeout=1)
Traceback (most recent call last):
File "/Users/admin/miniforge3/lib/python3.12/site-packages/urllib3/connectionpool.py", line 537, in _make_request
response = conn.getresponse()
^^^^^^^^^^^^^^^^^^
File "/Users/admin/miniforge3/lib/python3.12/site-packages/urllib3/connection.py", line 466, in getresponse
httplib_response = super().getresponse()
^^^^^^^^^^^^^^^^^^^^^
File "/Users/admin/miniforge3/lib/python3.12/http/client.py", line 1428, in getresponse
response.begin()
File "/Users/admin/miniforge3/lib/python3.12/http/client.py", line 331, in begin
version, status, reason = self._read_status()
^^^^^^^^^^^^^^^^^^^
File "/Users/admin/miniforge3/lib/python3.12/http/client.py", line 292, in _read_status
line = str(self.fp.readline(_MAXLINE + 1), "iso-8859-1")
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/admin/miniforge3/lib/python3.12/socket.py", line 707, in readinto
return self._sock.recv_into(b)
^^^^^^^^^^^^^^^^^^^^^^^
TimeoutError: timed out
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/Users/admin/miniforge3/lib/python3.12/site-packages/requests/adapters.py", line 486, in send
resp = conn.urlopen(
^^^^^^^^^^^^^
File "/Users/admin/miniforge3/lib/python3.12/site-packages/urllib3/connectionpool.py", line 847, in urlopen
retries = retries.increment(
^^^^^^^^^^^^^^^^^^
File "/Users/admin/miniforge3/lib/python3.12/site-packages/urllib3/util/retry.py", line 470, in increment
raise reraise(type(error), error, _stacktrace)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/admin/miniforge3/lib/python3.12/site-packages/urllib3/util/util.py", line 39, in reraise
raise value
File "/Users/admin/miniforge3/lib/python3.12/site-packages/urllib3/connectionpool.py", line 793, in urlopen
response = self._make_request(
^^^^^^^^^^^^^^^^^^^
File "/Users/admin/miniforge3/lib/python3.12/site-packages/urllib3/connectionpool.py", line 539, in _make_request
self._raise_timeout(err=e, url=url, timeout_value=read_timeout)
File "/Users/admin/miniforge3/lib/python3.12/site-packages/urllib3/connectionpool.py", line 370, in _raise_timeout
raise ReadTimeoutError(
urllib3.exceptions.ReadTimeoutError: HTTPConnectionPool(host='127.0.0.1', port=5000): Read timed out. (read timeout=1)
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/Users/admin/miniforge3/lib/python3.12/site-packages/requests/api.py", line 73, in get
return request("get", url, params=params, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/admin/miniforge3/lib/python3.12/site-packages/requests/api.py", line 59, in request
return session.request(method=method, url=url, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/admin/miniforge3/lib/python3.12/site-packages/requests/sessions.py", line 589, in request
resp = self.send(prep, **send_kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/admin/miniforge3/lib/python3.12/site-packages/requests/sessions.py", line 703, in send
r = adapter.send(request, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/admin/miniforge3/lib/python3.12/site-packages/requests/adapters.py", line 532, in send
raise ReadTimeout(e, request=request)
requests.exceptions.ReadTimeout: HTTPConnectionPool(host='127.0.0.1', port=5000): Read timed out. (read timeout=1)
>>>
2.3 读超时
>>> requests.get('http://127.0.0.1:5000/api',timeout=(1, 1))
Traceback (most recent call last):
File "/Users/admin/miniforge3/lib/python3.12/site-packages/urllib3/connectionpool.py", line 537, in _make_request
response = conn.getresponse()
^^^^^^^^^^^^^^^^^^
File "/Users/admin/miniforge3/lib/python3.12/site-packages/urllib3/connection.py", line 466, in getresponse
httplib_response = super().getresponse()
^^^^^^^^^^^^^^^^^^^^^
File "/Users/admin/miniforge3/lib/python3.12/http/client.py", line 1428, in getresponse
response.begin()
File "/Users/admin/miniforge3/lib/python3.12/http/client.py", line 331, in begin
version, status, reason = self._read_status()
^^^^^^^^^^^^^^^^^^^
File "/Users/admin/miniforge3/lib/python3.12/http/client.py", line 292, in _read_status
line = str(self.fp.readline(_MAXLINE + 1), "iso-8859-1")
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/admin/miniforge3/lib/python3.12/socket.py", line 707, in readinto
return self._sock.recv_into(b)
^^^^^^^^^^^^^^^^^^^^^^^
TimeoutError: timed out
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/Users/admin/miniforge3/lib/python3.12/site-packages/requests/adapters.py", line 486, in send
resp = conn.urlopen(
^^^^^^^^^^^^^
File "/Users/admin/miniforge3/lib/python3.12/site-packages/urllib3/connectionpool.py", line 847, in urlopen
retries = retries.increment(
^^^^^^^^^^^^^^^^^^
File "/Users/admin/miniforge3/lib/python3.12/site-packages/urllib3/util/retry.py", line 470, in increment
raise reraise(type(error), error, _stacktrace)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/admin/miniforge3/lib/python3.12/site-packages/urllib3/util/util.py", line 39, in reraise
raise value
File "/Users/admin/miniforge3/lib/python3.12/site-packages/urllib3/connectionpool.py", line 793, in urlopen
response = self._make_request(
^^^^^^^^^^^^^^^^^^^
File "/Users/admin/miniforge3/lib/python3.12/site-packages/urllib3/connectionpool.py", line 539, in _make_request
self._raise_timeout(err=e, url=url, timeout_value=read_timeout)
File "/Users/admin/miniforge3/lib/python3.12/site-packages/urllib3/connectionpool.py", line 370, in _raise_timeout
raise ReadTimeoutError(
urllib3.exceptions.ReadTimeoutError: HTTPConnectionPool(host='127.0.0.1', port=5000): Read timed out. (read timeout=1)
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/Users/admin/miniforge3/lib/python3.12/site-packages/requests/api.py", line 73, in get
return request("get", url, params=params, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/admin/miniforge3/lib/python3.12/site-packages/requests/api.py", line 59, in request
return session.request(method=method, url=url, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/admin/miniforge3/lib/python3.12/site-packages/requests/sessions.py", line 589, in request
resp = self.send(prep, **send_kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/admin/miniforge3/lib/python3.12/site-packages/requests/sessions.py", line 703, in send
r = adapter.send(request, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/admin/miniforge3/lib/python3.12/site-packages/requests/adapters.py", line 532, in send
raise ReadTimeout(e, request=request)
requests.exceptions.ReadTimeout: HTTPConnectionPool(host='127.0.0.1', port=5000): Read timed out. (read timeout=1)
>>>
>>>
>>>
>>>
2.4 不超时
>>>
>>> requests.get('http://127.0.0.1:5000/api',timeout=(1, 2.1))
<Response [200]>
>>>
>>> requests.get('http://127.0.0.1:5000/api',timeout=2.1)
<Response [200]>
>>>
>>> print(requests.get('http://127.0.0.1:5000/api',timeout=2.1).json())
{'message': 'Hello, World!'}
>>>
更多推荐
所有评论(0)