gpt4 book ai didi

python - 如何使用 aiohttp 确定每秒请求数?

转载 作者:太空宇宙 更新时间:2023-11-04 05:14:56 25 4
gpt4 key购买 nike

我正在尝试使用 aiohttp 创建网络流量模拟器。以下代码示例异步发出 10k 个请求。我想知道其中有多少是同时发生的,所以我可以说这模拟了 10k 用户同时请求一个网站。

我如何确定并发网络请求的数量,或者我如何确定 aiohttp 每秒发出多少请求?有没有办法实时调试/分析并发请求数?

有没有更好的方法来使用任何其他编程语言为网络流量模拟器建模?

import asyncio
import aiohttp

async def fetch(session, url):
with aiohttp.Timeout(10, loop=session.loop):
async with session.get(url) as response:
return await response.text()

async def run(r):
url = "http://localhost:3000/"
tasks = []

# Create client session that will ensure we dont open new connection
# per each request.
async with aiohttp.ClientSession() as session:
for i in range(r):
html = await fetch(session, url)
print(html)


# make 10k requests per second ?? (not confident this is true)
number = 10000
loop = asyncio.get_event_loop()
loop.run_until_complete(run(number))

最佳答案

你好,首先在原始代码中有一个错误:

async with aiohttp.ClientSession() as session:
for i in range(r):
# This line (the await part) makes your code wait for a response
# This means you done 1 concurent request
html = await fetch(session, url)

如果你修复了这个错误,你就会得到你想要的——所有的请求都会同时开始。

除非使用 Semaphore/Queue,否则您将对服务进行锤击。

无论如何,如果这是你想要的,你可以使用这个:

import asyncio
import aiohttp
import tqdm


async def fetch(session, url):
with aiohttp.Timeout(10, loop=session.loop):
async with session.get(url) as response:
return await response.text()


async def run(r):
url = "http://localhost:3000/"
tasks = []
# The default connection is only 20 - you want to stress...
conn = aiohttp.TCPConnector(limit=1000)
tasks, responses = [], []
async with aiohttp.ClientSession(connector=conn) as session:
tasks = [asyncio.ensure_future(fetch(session, url)) for _ in range(r)]
#This will show you some progress bar on the responses
for f in tqdm.tqdm(asyncio.as_completed(tasks), total=len(tasks)):
responses.append(await f)
return responses

number = 10000
loop = asyncio.get_event_loop()
loop.run_until_complete(run(number))

感谢asyncio aiohttp progress bar with tqdm对于 tqdm :)

我还建议阅读 https://pawelmhm.github.io/asyncio/python/aiohttp/2016/04/22/asyncio-aiohttp.html以便更好地了解协程的工作原理。

关于python - 如何使用 aiohttp 确定每秒请求数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42010693/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com