Ошибка got Future attached to a different loop при выполнении prefetch_related в tortoise
Есть асинхронный запрос запрос, он находится в асинхронной функции async def get_document
packages = await Package.filter(document_id=str(document.uuid), parent_id=None).prefetch_related(
'goods',
'childs',
'childs__goods',
'package_barcodes',
'package_barcodes__goods',
'childs__childs',
'childs__childs__goods',
'childs__package_barcodes',
'childs__package_barcodes__goods',
'childs__childs__package_barcodes',
'childs__childs__package_barcodes__goods'
)
При выполнении функции get_document в event_loop (т.е. в loop = asyncio.get_event_loop()) всё работает нормально, я получаю все связанные объекты. Но при выполнении этой же функции из вновь созданного цикла (new_loop = asyncio.new_event_loop()) падает ошибка указанная в заголовке поста. new_loop создаётся и запускается в отдельном потоке. Причем если в prefetch_related я буду запрашивать только один тип начального пути (только goods или только childs или childs__childs, childs__childs__goods, childs__childs__package_barcodes__goods), то всё работает без ошибок. Не могу понять в чём проблема
Ответы (1 шт):
Я передал в поток изначальный event_loop (event_loop = asyncio.get_event_loop()), уже внутри потока создал task и передал туда асинхронную функцию (внутри потока task = event_loop.create_task(get_document())), и всё заработало. Но я всё так и не пойму почему я мог из вновь созданного цикла событий запрашивать в prefetch_related только один тип начального пути.