You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 16:42:02