Python异步编程:aiohttp示例中任务何时加入事件循环?
Python异步任务执行机制疑问
我对Python的异步功能(向事件循环添加任务、使用await等)较为熟悉,但近期看到一个示例后产生困惑:
import aiohttp import asyncio import time start_time = time.time() async def main(): async with aiohttp.ClientSession() as session: for number in range(1, 151): pokemon_url = f'https://pokeapi.co/api/v2/pokemon/{number}' async with session.get(pokemon_url) as resp: pokemon = await resp.json() print(pokemon['name']) asyncio.run(main()) print("--- %s seconds ---" % (time.time() - start_time))
上述代码能够并发执行,但我不清楚其事件循环的运作机制。我理解session是异步创建的,之后for循环会按顺序执行到某一阶段。我猜测async with session.get负责将任务加入事件循环,但具体实现方式不明。
我自己的写法如下:
async with asyncio.TaskGroup() as group: for i in range(x): group.create_task(session.get(url))
我认为两者功能等价,那么第一个示例中任务是如何被加入事件循环的?
内容的提问来源于stack exchange,提问作者Pol
相关产品推荐
相关产品推荐

