Python 打开新线程运行请求与异步IO的aiohttp.ClientSession之间的时间成本差异?

Python 打开新线程运行请求与异步IO的aiohttp.ClientSession之间的时间成本差异?,python,asynchronous,python-asyncio,aiohttp,Python,Asynchronous,Python Asyncio,Aiohttp,我知道aiohttp支持异步IO,所以它是完全单线程的。但是run_in_执行器会启动一个新线程。但是我测试了一个有1000次下载的任务,看起来差别不大。但我认为aiohttp应该更快,因为线程成本更高。我做错什么了吗 async def get(url): async with aiohttp.ClientSession() as session: async with session.get(url) as resp: print(url, r

我知道aiohttp支持异步IO,所以它是完全单线程的。但是run_in_执行器会启动一个新线程。但是我测试了一个有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))
但是我测试了一个有1000次下载的任务,看起来有区别 这是相当微不足道的

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


例如,您可以查看OP在何处尝试比较线程和协同程序,但没有得到任何差异,以及在何处解释了此结果并提供了修复程序。

wow谢谢。我实际上没有看到这个问题,但这个答案回答得很好。看来我的假设是对的,只是我的测试需要改进。