首页 > 解决方案 > Python HTTP 请求/响应速度很慢

问题描述

我想测试一个简单的 ping-pong 服务在一定时间内可以处理多少 http 请求。我已经在 J​​ava 和 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)

标签: pythonflask

解决方案


您在这里面临的问题是 Python requests 库是一个同步库。

虽然您的 Flask 应用程序(如果设置正确)将能够一次处理多个请求,但您用于发送请求的代码一次只能发送一个请求,并且会阻塞直到每个请求按顺序完成。

对服务器速度的更好测试是使用 Python 的一些较新的async功能,利用asyncio 之类的库

试一试作为触发测试请求的方法,看看它是否仍然很慢。如果是这样,至少您将排除一个潜在问题!

作为一个你可以尝试使用 asyncio 的优秀库的示例,请查看AIOHTTP


推荐阅读