对比 Python 和 Go 语言的每秒请求数
zajin · · 4790 次点击 · · 开始浏览我使用Python工作已经有几年了,最近开始了一个关于GO的调查,主要看作是一个缓解瓶颈的实验,还没有大规模web服务器部署。
我用不同语言写了一个简单的REST服务,使用ab工具检测响应速度。
Python
server.py
01
from bottle import route,
run
02
03
@route('/')
04
def home():
05
article = {'name': 'A
Royal Baby', 'body':'A
slow news week'}
06
return article
07
08
def main():
09
run(host='localhost',
port=8081)
10
11
if __name__ == '__main__':
12
main()
Go
server.go
01
package
main
02
03
import
(
04
"encoding/json"
05
"fmt"
06
"github.com/emicklei/go-restful"
07
"io"
08
"net/http"
09
)
10
11
func
main() {
12
ws
:= new(restful.WebService)
13
ws.Route(ws.GET("/").To(hello))
14
restful.Add(ws)
15
fmt.Print("Server
starting on port 8080\n")
16
http.ListenAndServe(":8080",
nil)
17
}
18
19
func
hello(req *restful.Request, resp *restful.Response) {
20
article
:= Article{"A
Royal Baby", "A
slow news week"}
21
b,
_ := json.Marshal(article)
22
io.WriteString(resp,
string(b))
23
}
24
25
type
Article struct {
26
Name
string
27
Body
string
28
}
|
Go语言的版本明显比Python版的更详细,但我认为它仍然非常言简意赅。Python服务器使用bottle框架,指定的article字典作为响应自动序列化返回。Go服务器使用go-restful包,这个包使得在Go中很容易构建RESTful API。 测试基准是在Macbook Pro上,CPU i7 2.4Ghz,16GB RAM。 使用下附命令: ab -q -c 50 -n 1000 http://127.0.0.1:8080/ | grep "Requests per second" 结果5次测试,1000次请求的平均每秒钟完成请求次数
Go平均完成13457次请求/秒,Python完成1311次请求/秒 |
在本次测试中,Go在完成JSON响应方面比Python快10.26倍。
我知道这些脚本非常的简单,而且缺少实际应用中的逻辑——例如数据库连接。也许有比ab更准确的测试方法,但我认为这些结果足以给你一个尝试Go的理由。以我目前的经验,从Python到编译型语言有很多乐趣。
做过Python/Go基准测试的想一起分享么?
有疑问加站长微信联系(非本文作者)
入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889
关注微信- 请尽量让自己的回复能够对别人有帮助
- 支持 Markdown 格式, **粗体**、~~删除线~~、
`单行代码` - 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
- 图片支持拖拽、截图粘贴等方式上传
收入到我管理的专栏 新建专栏
我使用Python工作已经有几年了,最近开始了一个关于GO的调查,主要看作是一个缓解瓶颈的实验,还没有大规模web服务器部署。
我用不同语言写了一个简单的REST服务,使用ab工具检测响应速度。
Python
server.py
01
from bottle import route,
run
02
03
@route('/')
04
def home():
05
article = {'name': 'A
Royal Baby', 'body':'A
slow news week'}
06
return article
07
08
def main():
09
run(host='localhost',
port=8081)
10
11
if __name__ == '__main__':
12
main()
Go
server.go
01
package
main
02
03
import
(
04
"encoding/json"
05
"fmt"
06
"github.com/emicklei/go-restful"
07
"io"
08
"net/http"
09
)
10
11
func
main() {
12
ws
:= new(restful.WebService)
13
ws.Route(ws.GET("/").To(hello))
14
restful.Add(ws)
15
fmt.Print("Server
starting on port 8080\n")
16
http.ListenAndServe(":8080",
nil)
17
}
18
19
func
hello(req *restful.Request, resp *restful.Response) {
20
article
:= Article{"A
Royal Baby", "A
slow news week"}
21
b,
_ := json.Marshal(article)
22
io.WriteString(resp,
string(b))
23
}
24
25
type
Article struct {
26
Name
string
27
Body
string
28
}
|
Go语言的版本明显比Python版的更详细,但我认为它仍然非常言简意赅。Python服务器使用bottle框架,指定的article字典作为响应自动序列化返回。Go服务器使用go-restful包,这个包使得在Go中很容易构建RESTful API。 测试基准是在Macbook Pro上,CPU i7 2.4Ghz,16GB RAM。 使用下附命令: ab -q -c 50 -n 1000 http://127.0.0.1:8080/ | grep "Requests per second" 结果5次测试,1000次请求的平均每秒钟完成请求次数
Go平均完成13457次请求/秒,Python完成1311次请求/秒 |
在本次测试中,Go在完成JSON响应方面比Python快10.26倍。
我知道这些脚本非常的简单,而且缺少实际应用中的逻辑——例如数据库连接。也许有比ab更准确的测试方法,但我认为这些结果足以给你一个尝试Go的理由。以我目前的经验,从Python到编译型语言有很多乐趣。
做过Python/Go基准测试的想一起分享么?