对比 Python 和 Go 语言的每秒请求数 已翻译 100%

oschina 投递于 2013/08/19 11:51 (共 3 段, 翻译完成于 08-19)
阅读 33087
收藏 69
5
加载中

我使用Python工作已经有几年了,最近开始了一个关于GO的调查,主要看作是一个缓解瓶颈的实验,还没有大规模web服务器部署。

我用不同语言写了一个简单的REST服务,使用ab工具检测响应速度。

Python

server.py

from bottle import route, run

@route('/')
def home():
    article = {'name': 'A Royal Baby', 'body':'A slow news week'}
    return article

def main():
    run(host='localhost', port=8081)

if __name__ == '__main__':
    main()

Go

server.go

package main

import (
    "encoding/json"
    "fmt"
    "github.com/emicklei/go-restful"
    "io"
    "net/http"
)

func main() {
    ws := new(restful.WebService)
    ws.Route(ws.GET("/").To(hello))
    restful.Add(ws)
    fmt.Print("Server starting on port 8080\n")
     http.ListenAndServe(":8080", nil)
}

func hello(req *restful.Request, resp *restful.Response) {
    article := Article{"A Royal Baby", "A slow news week"}
    b, _ := json.Marshal(article)
    io.WriteString(resp, string(b))
}

type Article struct {
    Name string
    Body string
}
Garfielt
Garfielt
翻译于 2013/08/19 12:29
4

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次请求的平均每秒钟完成请求次数

Run Python Go
1 1310.58 13568.34
2 1332.82 13092.95
3 1331.54 13479.45
4 1306.09 13271.58
5 1274.49 13873.09

Go平均完成13457次请求/秒,Python完成1311次请求/秒

Garfielt
Garfielt
翻译于 2013/08/19 12:39
2

在本次测试中,Go在完成JSON响应方面比Python快10.26倍。

我知道这些脚本非常的简单,而且缺少实际应用中的逻辑——例如数据库连接。也许有比ab更准确的测试方法,但我认为这些结果足以给你一个尝试Go的理由。以我目前的经验,从Python到编译型语言有很多乐趣。

做过Python/Go基准测试的想一起分享么?



Garfielt
Garfielt
翻译于 2013/08/19 12:47
2
本文中的所有译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接。
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。
加载中

评论(120)

J
JuncoJet
up主没用过python不要瞎做对比
J
JuncoJet
你这测试不公平,bottle需要搭配uwsgi来用,你这个没有并发
l
larry111
这个对比完全不公平、go是纯异步携程模式、bottle用的是默认的debug单线程模式、这根本就不在一个场地上比较。把python的换成tonado再试试、性能会比go还强。
Cleric_X
Cleric_X
和瘸子比谁跑的快不如比谁长的帅
L34Rn
L34Rn
都是专业写代码的...能不能不要这么不专业?编译型语言和解释性语言比性能?
丑矬穷
丑矬穷

我的iis上,测试纯静态页,还加缓存,都上不了2000并发,I5处理器

wwek
wwek

引用来自“MinGKai”的评论

go比python要少4个字母。。

终于看到个好玩的 哈哈哈哈。
wwek
wwek

引用来自“leijiao”的评论

go性能接近c比python高很多,这不很正常么?有必要争么?python又不是亲娘老子。至于么,保持开放的心态是程序员基本素质

赞同、。
mingkaidox
mingkaidox
go比python要少4个字母。。
chai2010
chai2010
针对binary-trees测试, 使用pool的Go的时间是5.22, C是4.79.
如果C再禁用openmp的话, 时间还会更多.
Java没有基于pool是9.24.

如果Go的代码再关闭数字下标越界测试的话,
性能或许还有一些提升(要看数组访问所占总时间的比例).

只能说, 各种性能测试对各种环境依赖太多了.
返回顶部
顶部