Ich denke, ich würde gerne tun:
async with ClientSession() as session:
await web.run_app(app)
Wiederverwenden einer Aiohttp-Client-Sitzung während der gesamten Lebensdauer eines Servers. Oder jeder andere asynchrone Kontextmanager wie eine Verbindung zu einer Datenbank und so weiter.
Einfaches Ausführen eines Aiohttp-Servers in einem asynchronen Kontextmanager.
Ich mache eigentlich:
async def on_startup_wrapper(app):
app["aiohttp_client_session"] = await ClientSession().__aenter__()
async def on_cleanup_wrapper(app):
await app["aiohttp_client_session"].__aexit__(None, None, None)
app.on_startup.append(on_startup_wrapper)
app.on_cleanup.append(on_cleanup_wrapper)
aber ich bin nicht stolz darauf.
Offensichtlich kann es nicht mit den tatsächlichen run_app
, und wahrscheinlich leicht mit den _run_app
, aber _
.
Vielleicht könnten die AppRunner
einen Code von _run_app
essen, der es einem ermöglicht, _run_app
mit etwas wie:
runner = AppRunner(app, ...)
await runner.setup(host, path, sock, port) # Doing most of _run_app current code here
async with Something() as something:
app["something"] = something
await runner.run_forever() # The while True of the current _run_app
Sieht es nach einer guten Idee aus? Soll ich eine PR versuchen? Oder verstehe ich etwas falsch?
Hey @JulienPalard , kennen Sie den Bereinigungskontext? https://docs.aiohttp.org/en/stable/web_advanced.html#cleanup -context
Würde das für dich funktionieren?
async def init_session_ctx(app):
async with ClientSession() as session:
app["aiohttp_client_session"] = session
try:
yield
finally:
del app["aiohttp_client_session"]
app.cleanup_ctx.append(init_session_ctx)
Ich habe cleanup_ctx beim Lesen des Dokuments verpasst, danke!
In meinem aktuellen Fall habe ich zwei Kontextmanager, die cleanup_ctx
anstelle von on_startup
und on_cleanup
Dadurch erhalte ich 13 neue Zeilen für 18 entfernte Zeilen, und ich bin nicht mehr Ich rufe __aenter__
und __aexit__
selbst an, also ist es besser, ja.
Es fehlt wahrscheinlich irgendwo ein Link, um es einfacher zu machen, von vielleicht on_startup
?
Bedeuten Sie, dass die Auffindbarkeit verbessert werden kann? Sie können gerne versuchen, das Dokument zu verbessern.
Hilfreichster Kommentar
Hey @JulienPalard , kennen Sie den Bereinigungskontext? https://docs.aiohttp.org/en/stable/web_advanced.html#cleanup -context
Würde das für dich funktionieren?