【发布时间】:2017-05-19 09:24:53
【问题描述】:
我需要对我的 API 进行压力测试。 我修改了that example 以发送 POST 而不是 HEAD,我还向我的请求添加了一些数据:
count = int(sys.argv[1])
url = "http://api.example.com/"
test_id = datetime.now().strftime("%H%M%S%f")
data = []
for i in range(count):
req_data = {
'test_id': test_id,
'param1': i,
'param2': 'aaa',
'param3': 'bbb',
}
data.append(req_data)
start_time = time.time()
res = grequests.map(grequests.post(url, data=data[i]) for i in range(count))
sending_time = time.time() - start_time
print(sending_time)
之后性能下降到每秒 5 个请求! 我也尝试了来自that question 的所有答案并收到了相同的结果。达到 1000 req/sec 是真的吗?
【问题讨论】:
-
当然,与 HEAD 相比,POST 在您的 Web 服务器中需要更多的处理。 Web 服务器处理并发请求的能力如何?你可以配置它来使用更多的工人吗?它是使用工人吗?通过切换到 POST,您的问题范围现在必须包括服务器和客户端中的处理。
-
我在服务器端使用 Twisted
-
将注意力转移到让服务器每秒处理 1000 个请求。客户端代码不是您的瓶颈。仅仅使用 Twisted 并不是一根魔杖。您需要将处理程序分解为多个延迟处理程序,以便更好地重叠处理和来自并发请求的 I/O。
-
听起来您可能发现了服务器的瓶颈。通过服务器代码回溯并查看减速发生的位置并进行调整。寻找
deferToThread之类的东西或任何需要一段时间才能完成的延迟。
标签: python http twisted python-asyncio grequests