аснихронный __exit__
Я использую aiohttp. Мне необходимо сделать закрытие сессии при уничтожении объекта. Но это запрещено делать асинхронно. Есть ли способ реализовать это в python?
class X:
def __init__(self):
self.session = aiohttp.ClientSession()
def __exit__(self, exc_type, exc_val, exc_tb):
await self.session.close()
async def r(self):
resp = await self.session.get('http://httpbin.org/get')
Возможно, именно для этого используется асинхронный контекст. Если я прав, объясните, как им пользоваться.
Ответы (1 шт):
Автор решения: eri
→ Ссылка
Есть в PEP492 __aexit__() в python3.5+
An example of an asynchronous context manager:
class AsyncContextManager: async def aenter(self): await log('entering context')
async def __aexit__(self, exc_type, exc, tb): await log('exiting context')New Syntax A new statement for asynchronous context managers is proposed:
async with EXPR as VAR: BLOCK
но если очень хочется, то
from asgiref.sync import async_to_sync
...
async_to_sync(self.session.close)()