之前做过python入库到redis的测试 http://www.simonzhang.net/?p=430
今天才发现由于页面生成问题,有部分代码被转译了。借这个机会在同一台机器上再测试一下这两种语言。
测试服务器为一个Xeon(TM)双核3.20GHz 的cpu,内存4G。操作系统为Centos5.4 64位。go1.0.2,python2.6
go环境和redis之前已经有记录,go语言的redis开发包安装也比较简单,但是官方文档中目录有写错。
我的go放在/usr/local/go,我的安装记录如下:
cd /usr/local/go/src/pkg
git clone git://github.com/alphazero/Go-Redis.git redis
cd redis
go install
仍旧用大密码表实验,go语言代码如下:
//www.simonzhang.net package main import ( "os"; "log"; "fmt"; "redis"; "encoding/hex" "crypto/md5" ) func main () { spec := redis.DefaultSpec().Db(1).Password(""); //如要操作远程redis服务器连接如下 //spec := redis.DefaultSpec().Host("192.168.1.200").Db(1).Password("123"); client, e := redis.NewSynchClientWithSpec (spec); if e != nil { log.Println ("failed to create the client", e); return } var str string userFile := "big_pass.txt" fin,err := os.Open(userFile) defer fin.Close() if err != nil { fmt.Println(userFile,err) return } buf := make([]byte, 1) for{ n,_:= fin.Read(buf) if 0==n {break} if string(buf)=="\n"{ h:= md5.New() h.Write([]byte(str)) key:=hex.EncodeToString(h.Sum(nil)); value:=[]byte(str) client.Set(key, value); str="" }else{ str+=string(buf) } } }
开始测试
go使用build编译运行,cpu使用率在55%左右,load average: 1.98, 1.22, 0.91
real 1m33.310s
user 0m42.586s
sys 0m34.567s
python cpu使用在在80%,load average: 2.19, 1.36, 0.86。
real 1m26.873s
user 0m56.316s
sys 0m19.595s
总结python写redis的东西比较简单。go对字符串做了MD5,入redis时用MD5值做key。
a)都运行完毕python和go录入redis行数与文本行数相同。
b)从大小来看python不到1K,go编译完成2.3M。如果要一处编译,移到其他服务器运行,go编译完的可以直接运行,python还要再装环境。但是有easy_install,所以装环境对我来说比较简单。
c) cpu使用量来看go要比python好一些,在增加md5计算的情况下所用系统资源也比pyhton少,但是应该快不了一倍。
d) 从代码编写的逻辑和难易程度来看,还是python简单一点。
如果要考虑速度可以试试Cpython,我没有试过。
发表评论