gpt4 book ai didi

python - 在 aiohttp 或 httpx 中,我需要在应用程序关闭时关闭 session /客户端吗

转载 作者:行者123 更新时间:2023-12-03 08:31:01 27 4
gpt4 key购买 nike

我正在使用httpx库,但我认为 aiohttp 的原理是一样的。如果我在应用程序的整个生命周期中为多个请求创建并重用 AsyncClient,我是否需要调用 aclose() (或 close 如果使用客户端)在应用程序关闭事件中?或者这些连接会自行消失。

如果我在 Docker 容器中运行应用程序会怎样?这也会是一个因素吗?

我不明白 AsyncClient 或 Client(或 aoihttp 中的 ClientSession)对象下面发生了什么。

感谢您的帮助。

最佳答案

我建议您在启动关闭时使用触发器。它们在文档https://fastapi.tiangolo.com/advanced/events/#events-startup-shutdown中进行了描述。 .

下面是对文档中示例的改编:

from fastapi import FastAPI
import httpx

app = FastAPI()

items = {}
client = None


@app.on_event("startup")
async def startup_event():
items["foo"] = {"name": "Fighters"}
items["bar"] = {"name": "Tenders"}
client = httpx.AsyncClient()

@app.on_event("shutdown")
async def shutdown_event():
items["foo"] = {"name": "Fighters"}
items["bar"] = {"name": "Tenders"}
await client.aclose()

编辑

抱歉,误解了问题。

无论如何,正如 @Klaus D 评论的那样,系统应该杀死保持开放端口的子进程(如果生成了许多子进程)。

根据我的经验,情况可能并不总是如此,因为我记得在使用 php 编程时,我必须手动终止所有数据库连接,否则在应用程序重新启动时我会收到“该进程已在使用该端口”。

虽然这是数据库连接而不是 HTTP 连接的情况,但关闭所有未使用的连接始终是一个好习惯,因为操作系统可能会延迟注意到打开端口的正在运行的进程并终止它。因此您的应用程序(或您拥有的任何应用程序)将被停止,但该进程在一段时间后仍在运行。

操作系统的更新可能会改变进程观察程序的行为,并且取决于操作系统本身。所以,请对我所说的持保留态度。

关于python - 在 aiohttp 或 httpx 中,我需要在应用程序关闭时关闭 session /客户端吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65103017/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com