python - Python HTTP 请求/响应速度很慢
问题描述
我想测试一个简单的 ping-pong 服务在一定时间内可以处理多少 http 请求。我已经在 Java 和 Go 中实现了它,并且运行良好。但是当用 python 测试它时,一个乒乓循环在我的机器上需要超过 2 秒,而且时间非常长。在其他语言中,我每毫秒有近 1 个。是我用 python 得到的 2000 多倍……那怎么可能?我认为每次都需要使用 python 再次构建 http 服务器,但真的是这样吗?我该如何修复它?
当然,我的小 Python 脚本的代码如下:
import requests
add = 'aaaaaaaaaa'
sum = ''
def getTime(i):
site_request = requests.post("http://localhost:8082/ping", data=i)
site_response = str(site_request.content)
return site_response
def printToFile():
return
for x in range(5):
print(getTime(sum))
sum += add
from flask import Flask
from flask import request
import requests
import time
app = Flask(__name__)
@app.route("/ping", methods=['POST'])
def region():
data = request.get_data()
start = time.time()
site_request = requests.post("http://localhost:8080/pong", data=data)
site_response = str(site_request.content)
end = time.time()
cl = int(site_request.headers['content-length'])
if cl != len(data):
return end - start + ", " + cl + "," + 500
return str(end - start) + "," + str(cl) + "," + str(200)
app.run(host='127.0.0.1', port= 8082)
from flask import Flask
from flask import request
app = Flask(__name__)
@app.route("/pong", methods=['POST'])
def region():
data = request.get_data()
return data
app.run(host='127.0.0.1', port= 8080)
解决方案
您在这里面临的问题是 Python requests 库是一个同步库。
虽然您的 Flask 应用程序(如果设置正确)将能够一次处理多个请求,但您用于发送请求的代码一次只能发送一个请求,并且会阻塞直到每个请求按顺序完成。
对服务器速度的更好测试是使用 Python 的一些较新的async
功能,利用asyncio 之类的库
试一试作为触发测试请求的方法,看看它是否仍然很慢。如果是这样,至少您将排除一个潜在问题!
作为一个你可以尝试使用 asyncio 的优秀库的示例,请查看AIOHTTP。
推荐阅读
- javascript - 在所有ajax请求完成后执行代码
- python - 使用 python-docx 合并包含图像的 docx 文件
- c# - 用于 DataGridView (Windows.Forms) 和过滤的数组、列表或数据表
- varnish - 如何使用 Varnish vcl 语言实现此行为(按键字典)
- salesforce - 如何在 SOQL 中编写多关系查询
- c# - 多个列表
到锯齿状数组 C# - javascript - 如何获取数组中的不同元素?
- php - PHP - 检查任何嵌套数组是否不为空
- python - 将数据帧一分为二并使用波浪号 ~ 作为变量
- angular - 如何不删除“index.html”?