Такой хак работаетс с 3.6+, aclose вызовется при закрытии loop
import asyncio
class Test():
async def aclose(self):
print('hook during close')
test = Test()
async def main():
asyncio.get_event_loop()._asyncgen_firstiter_hook(test)
await asyncio.sleep(1)
asyncio.run(main())
Ещё вариант, CancelledError происходит при остановке loop, тогда можно и вызвать свой код
import asyncio
async def main():
print('start')
async def on_stop():
try:
await asyncio.sleep(10**10)
except asyncio.CancelledError:
pass
print('stopping start')
await asyncio.sleep(1)
print('stopping end')
asyncio.ensure_future(on_stop())
await asyncio.sleep(1)
asyncio.run(main())