并发请求被挂起。这是我用来测试并发请求的示例代码。
import aiohttp
import asyncio
async def fetch(session, url):
async with session.get(url) as response:
print(await response.text())
async def main(n):
url = "https://httpstat.us/200"
async with aiohttp.ClientSession() as session:
tasks = [asyncio.create_task(fetch(session, url)) for _ in range n]
await asyncio.gather(*tasks)
asyncio.run(main(10))
当我发出10个并发请求时,同时发出前4-5个请求,然后将其挂起10秒钟以上,然后开始运行2-3个并发请求后再次挂起的其余任务。如果我发出100个并发请求,它将发出25-30个并发请求并被挂起,然后发出5-6个请求并再次被挂起,直到所有任务完成为止。
使用aiohttp向https://httpstat.us/200
发送100个请求需要花费两分钟的时间。
如果我不使用持久性ClientSession
并为每个请求创建新的ClientSession
,那么所有数百个请求将在5秒内完成而不会挂起。
我不确定我在这里做什么。任何帮助将不胜感激。
答案 0 :(得分:0)
我能够使用以下代码运行此代码: python 3.7,asyncio 3.4.3,aiohttp 3.5.4
import aiohttp
import asyncio
async def fetch(session, url):
async with session.get(url) as response:
print(await response.text())
async def main(n):
url = "https://httpstat.us/200"
async with aiohttp.ClientSession() as session:
tasks = [asyncio.create_task(fetch(session, url)) for _ in range (0,n)]
await asyncio.gather(*tasks)
asyncio.run(main(10))