Если ты хочешь, чтобы контекстный менеджер при входе или выходе из…
Если ты хочешь, чтобы контекстный менеджер при входе или выходе из контекста приостанавливал выполнение корутины, следует использовать асинхронные контекстные менеджеры. Вместо вызова m.__enter__() и m.__exit__() Python в этом случае выполняет await m.__aenter__() и await m.__aexit__() соответственно.
Асинхронные контекстные менеджеры нужно использовать с синтаксисом async with:
В этом примере класс Slow симулирует задержку при входе и выходе из контекста.
👉 @BookPython
Асинхронные контекстные менеджеры нужно использовать с синтаксисом async with:
import asyncio
class Slow:
def __init__(self, delay):
self._delay = delay
async def __aenter__(self):
await asyncio.sleep(self._delay / 2)
async def __aexit__(self, *exception):
await asyncio.sleep(self._delay / 2)
async def main():
async with Slow(1):
print('slow')
loop = asyncio.get_event_loop()
loop.run_until_complete(main())В этом примере класс Slow симулирует задержку при входе и выходе из контекста.
👉 @BookPython