Если вы хотите получить все записи из асинхронного генератора, вы можете использовать async for
или, для краткости, асинхронные понимания :
async def asynchronous_function(*args, **kwds):
# ...
yield record
async def aget_records():
records = [
record
async for record
in asynchronous_function()
]
return records
Если вы хотите получить результат от асинхронной функции синхронно (т.е. блокирование), вы можете просто запустить эту функцию в цикле асинхронности :
def get_records():
records = asyncio.run(aget_records())
return records
Обратите внимание, однако, что после запуска некоторой сопрограммы в цикле событий вы теряете возможность запускать эту сопрограмму одновременно (то есть параллельно) с другими сопрограммами и, таким образом, получаете все связанные с этим преимущества.
Как уже указывалось в комментариях Винсент , asyncio
- это не волшебная палочка, которая ускоряет код, а инструмент, который иногда можно использовать для одновременного выполнения различных задач ввода-вывода с низкими издержками.
Возможно, вам будет интересно прочитать этот ответ , чтобы увидеть основную идею, лежащую в основе asyncio.