рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛:
async with ClientSession() as session:
await web.run_app(app)
рдПрдХ рд╕рд░реНрд╡рд░ рдХреЗ рдкреВрд░реЗ рдЬреАрд╡рди рдХреЗ рджреМрд░рд╛рди рдПрдХ aniohttp рдЧреНрд░рд╛рд╣рдХ рд╕рддреНрд░ рдХрд╛ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред рдпрд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд╕рдВрджрд░реНрдн рдкреНрд░рдмрдВрдзрдХ рдХреА рддрд░рд╣ рдПрдХ рдбреЗрдЯрд╛рдмреЗрд╕ рдФрд░ рдЗрддрдиреЗ рдкрд░ред
рдПрдХ рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рд╕рдВрджрд░реНрдн рдкреНрд░рдмрдВрдзрдХ рдХреЗ рдЕрдВрджрд░ рдЖрд╕рд╛рдиреА рд╕реЗ рдПрдХ aniohttp рд╕рд░реНрд╡рд░ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдПред
рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХрд░ рд░рд╣рд╛ рд╣реВрдБ:
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)
рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдЗрд╕ рдкрд░ рдЧрд░реНрд╡ рдирд╣реАрдВ рд╣реИред
рдЬрд╛рд╣рд┐рд░ рд╣реИ рдпрд╣ рд╡рд╛рд╕реНрддрд╡рд┐рдХ run_app
рд╕рд╛рде рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рд╢рд╛рдпрдж _run_app
рд╕рд╛рде рдЖрд╕рд╛рдиреА рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди _
ред
рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ AppRunner
_run_app
рд╕реЗ рдХреБрдЫ рдХреЛрдб рдЦрд╛ рд╕рдХреЗ, рдХрд┐рд╕реА рдХреЛ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рд╕реЗ _run_app
рдмрд╛рдпрдкрд╛рд╕ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐:
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
рдХреНрдпрд╛ рдпрд╣ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдЪрд╛рд░ рд╣реИ? рдХреНрдпрд╛ рдореБрдЭреЗ рдПрдХ рдкреАрдЖрд░ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдП? рдпрд╛ рдореИрдВ рдХреБрдЫ рдЧрд▓рдд рд╣реЛ рд░рд╣рд╛ рд╣реВрдБ?
рдЕрд░реЗ @JulienPalard , рдХреНрдпрд╛ рдЖрдк рд╕рдлрд╛рдИ рд╕рдВрджрд░реНрдн рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирддреЗ рд╣реИрдВ? https://docs.aiohttp.org/en/stable/web_advanced.html#cleanup -context
рдХреНрдпрд╛ рдпрд╣ рдЖрдкрдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░реЗрдЧрд╛?
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)
рдореИрдВ рдбреЙрдХреНрдЯрд░ рдХреЛ рдкрдврд╝рддреЗ рд╣реБрдП рдХреНрд▓реАрдирдЕрдк_рдПрдХреНрдЯрдПрдХреНрд╕ рд╕реЗ рдЪреВрдХ рдЧрдпрд╛, рдзрдиреНрдпрд╡рд╛рдж!
рдореЗрд░реЗ рд╡рд░реНрддрдорд╛рди рдорд╛рдорд▓реЗ рдореЗрдВ, рдореИрдВ рджреЛ рд╕рдВрджрд░реНрдн рдкреНрд░рдмрдВрдзрдХ рд░рдЦ рд░рд╣рд╛ рд╣реВрдВ, on_startup
рдФрд░ on_cleanup
рдмрдЬрд╛рдп cleanup_ctx
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдореБрдЭреЗ 18 рд▓рд╛рдЗрдиреЛрдВ рдХреЗ рд▓рд┐рдП 13 рдирдИ рд▓рд╛рдЗрдиреЗрдВ рджреА рдЧрдИрдВ, рдФрд░ рдореИрдВ рдЕрдм рдирд╣реАрдВ рд╣реВрдВ __aenter__
рдФрд░ __aexit__
рдЦреБрдж рдХреЛ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдмреЗрд╣рддрд░ рд╣реИ, рд╣рд╛рдБред
рдпрд╣ рд╢рд╛рдпрдж рдХрд╣реАрдВ рд╕реЗ рдПрдХ рд▓рд┐рдВрдХ рдпрд╛рдж рдЖрддреА рд╣реИ, рдпрд╣ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП on_startup
рд╢рд╛рдпрдж рд╕реЗ рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╕рд╛рди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП?
рдХреНрдпрд╛ рдЖрдк рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдЦреЛрдЬ рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ? рдЖрдк рдбреЙрдХреНрдЯрд░ рдХреЛ рдмреЗрд╣рддрд░ рдмрдирд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рд╛рдЧрдд рдХрд░рддреЗ рд╣реИрдВред
рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА
рдЕрд░реЗ @JulienPalard , рдХреНрдпрд╛ рдЖрдк рд╕рдлрд╛рдИ рд╕рдВрджрд░реНрдн рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирддреЗ рд╣реИрдВ? https://docs.aiohttp.org/en/stable/web_advanced.html#cleanup -context
рдХреНрдпрд╛ рдпрд╣ рдЖрдкрдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░реЗрдЧрд╛?