Если ты хочешь, чтобы контекстный менеджер при входе или выходе из контекста приостанавливал выполнение корутины, следует использовать асинхронные контекстные менеджеры. Вместо вызова m.__enter__()
и m.__exit__()
Python в этом случае выполняет await m.__aenter__()
и await m.__aexit__()
соответственно.
Асинхронные контекстные менеджеры нужно использовать с синтаксисом 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
>>Click here to continue<<