我一直很难理解Python的asyncio模块以及如何不阻止异步调用。例如,给定此代码段:
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.为什么阻止,以及如何/我可以避免阻塞?谢谢你的帮助。