【发布时间】:2021-12-23 06:04:46
【问题描述】:
考虑这个向 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 文档的this 部分建议在向同一个 URL 发出多个请求时使用Client 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 上下文管理器包装在一个函数中。如果我用同一个 URL 多次调用check_status_with_session,那不是每次调用函数时都会创建一个新的连接池吗?这意味着它实际上并没有重用连接。由于函数堆栈在函数执行后被销毁,Client 对象也应该被销毁,对吧? 这样做有什么好处还是有更好的方法?
【问题讨论】:
标签: python http session tcp httpx