Я согласен с Кириллом, допускать утекающие корутины - это как минимум непредусмотрительно. У нас есть несколько сервисов на асинкайо, и в каждом из них запускается отдельная корутина, которая отвечает за все эти фоновые процессы, следит за таймаутами и прочим таким (да как минимум ей просто передаются asyncio.Task). Супервизор, в общем. Сам такой супервизор всегда останавливается либо через atexit, либо через lifespan-события.
И это не от хорошей жизни. Эти супервизоры часто помогали отловить/митигировать сложные баги