考虑这个向 API 端点发出简单 GET 请求的函数:
import httpx
def check_status_without_session(url : str) -> int:
response = httpx.get(url)
return response.status_code
每次check_status_without_session
调用该函数时,运行此函数都会打开一个新的 TCP 连接。现在, HTTPX 文档的这一部分建议在Client
向同一个 URL 发出多个请求时使用 API。以下函数执行此操作:
import httpx
def check_status_with_session(url: str) -> int:
with httpx.Client() as client:
response = client.get(url)
return response.status_code
根据文档,使用Client
将确保:
...客户端实例使用 HTTP 连接池。这意味着当您向同一主机发出多个请求时,客户端将重用底层 TCP 连接,而不是为每个请求重新创建一个。
我的问题是,在第二种情况下,我将Client
上下文管理器包装在一个函数中。如果我check_status_with_session
用同一个 URL 多次调用,那不是每次调用函数时都会创建一个新的连接池吗?这意味着它实际上并没有重用连接。由于函数执行后函数栈被销毁,Client
对象也应该被销毁,对吧?这样做有什么好处还是有更好的方法?