首页 > 解决方案 > 打开新线程运行请求和异步 IO 的 aiohttp.ClientSession 之间的时间成本差异?

问题描述

我知道 aiohttp 支持异步 IO,所以它完全是单线程的。但是 run_in_executor 有点启动一个新线程。但是我测试了一个有 1000 次下载的任务,看起来差异是相当微不足道的。但我认为 aiohttp 应该更快,因为线程成本。我做错什么了吗?

async def get(url):
    async with aiohttp.ClientSession() as session:
        async with session.get(url) as resp:
            print(url, resp.status)
            print(url, await resp.text())

loop = asyncio.get_event_loop()     
tasks = [                           
    get("http://www.google.com"),
    get("http://www.google.com")
]
loop.run_until_complete(asyncio.wait(tasks))    
loop.close() 




async def get_via_thread(url):
    loop = asyncio.get_event_loop()
    try:
        response = await loop.run_in_executor(None, functools.partial(requests.get, url=url))

标签: pythonasynchronouspython-asyncioaiohttp

解决方案


但是我测试了一个有 1000 次下载的任务,看起来差异是相当微不足道的。

问题可能在您的基准测试中的某个地方。很难说确切的位置,因为你没有提供一个来复制:)

例如,您可以查看一个最近的问题,其中 OP 尝试比较线程和协程并没有得到任何区别,并回答了该结果解释和修复提供的位置。


推荐阅读