Вот все решения которые пришли в голову от простого и правильного к нетипичному.
- Не использовать новые потоки, потому что код и так асинхронный
- Сделать функцию aaa синхронной - проблема с запуском нового потока уйдет
- Если aaa невозможно изменить - нужно сделать обертку в виде синхронной функции (или декоратора), в который создать новый eventloop (предположим используется asyncio)
def wrapper(*args, **kwargs):
loop = asyncio.new_event_loop()
asyncio.set_event_loop(loop)
loop.run_until_complete(aaa(*args, **kwargs))
loop.close()