Мне было трудно понять модуль asyncio Python и как не блокировать асинхронные вызовы. Например, учитывая этот фрагмент кода:
import aiohttp
import asyncio
import async_timeout
async def fetch(session, url):
with async_timeout.timeout(10):
async with session.get(url) as response:
return await response.text()
async def main(loop):
print(1)
async with aiohttp.ClientSession(loop=loop) as session:
html = await fetch(session, 'http://python.org')
print(html)
print(2)
loop = asyncio.get_event_loop()
loop.run_until_complete(main(loop))
Я ожидаю, что аналогично тому, как это будет работать в Javascript, вывод будет
1
2
<!doctype html>
<...>
Вместо этого функция печатает 1, блокирует, пока не вернет html, затем печатает 2. Почему она блокируется и как/можно избежать блокировки? Спасибо за вашу помощь.