11月 10

raspberry pi 2用golang 控制GPIO

raspberry pi2散热量并不大,但是长时间高运算量运行还是装个小风扇比较好,所以做个自动开关的风扇。本次使用go 1.7。
硬件:4针热敏传感器模块,宝上买的1块5,采用NTC热敏电阻传感器。小风扇还没有到,用led实验。
首先安装需要库
go get github.com/stianeikeland/go-rpio
查看源码可以对Linux的文件系统有更好的了解,推荐要好好看看。
代码部分:

imhot20161110
运行后实验,用手加热
qidong20161101
放开手
tingzhi20161110
raspberry pi2 接口图

raspberry pi2

raspberry pi2

8月 19

Linux 暴力破解rar密码 性能查看

python使用自带的性能分析工具。
生成报告
# python -m cProfile -o test1.out decRAR.py tt.rar passwd.txt
tt.rar pass is 123

查看报告
# python -c “import pstats; p=pstats.Stats(‘test1.out’); p.print_stats()”
Sat Jul 30 10:07:38 2016 test1.out

305 function calls in 2.922 seconds

Random listing order was used

ncalls tottime percall cumtime percall filename:lineno(function)
50 0.001 0.000 0.001 0.000 {method ‘close’ of ‘file’ objects}
1 0.000 0.000 0.000 0.000 /usr/lib64/python2.7/site.py:357(__call__)
49 0.000 0.000 0.000 0.000 {method ‘find’ of ‘str’ objects}
49 0.006 0.000 2.919 0.060 /usr/lib64/python2.7/commands.py:56(getstatusoutput)
49 0.001 0.000 2.920 0.060 /usr/lib64/python2.7/commands.py:48(getoutput)
49 0.012 0.000 0.012 0.000 {posix.popen}
49 2.900 0.059 2.900 0.059 {method ‘read’ of ‘file’ objects}
1 0.000 0.000 0.000 0.000 {open}
2 0.000 0.000 0.000 0.000 {method ‘split’ of ‘str’ objects}
1 0.000 0.000 0.000 0.000 /usr/lib64/python2.7/warnings.py:14(warnpy3k)
1 0.000 0.000 2.922 2.922 decRAR.py:8()
1 0.000 0.000 0.000 0.000 /usr/lib64/python2.7/commands.py:20()
1 0.000 0.000 0.000 0.000 {method ‘disable’ of ‘_lsprof.Profiler’ objects}
1 0.000 0.000 0.000 0.000 {method ‘readlines’ of ‘file’ objects}
1 0.002 0.002 2.922 2.922 decRAR.py:13(main)

结论,密码有49个,所以调用解密命令49次,时间用在读文件上,就是解密部分。这样单进程单线程的结果应该已经是最佳了。

golang
不用协程部分,把main修改如下。

# time go run decRAR.go
tt.rar pass is 123
exit status 1

real 0m3.462s
user 0m3.117s
sys 0m0.291s
golang性能分析软件暂时没有用到。

8月 18

Linux 暴力破解rar密码

制作一个有简单密码的rar。简单密码表49行,正确密码在最后一行。暴力破解代码如下。
rar密码吗测试使用命令调用rarlinux方式测试,http://www.simonzhang.net/?p=2980

python部分

golang部分

源码部分

# time python decRAR.py tt.rar passwd.txt
tt.rar pass is 123

real 0m2.861s
user 0m2.535s
sys 0m0.279s

# time ./decRAR
tt.rar pass is 123

real 0m5.736s
user 0m5.151s
sys 0m0.452s

参数输入部分还没有开发,如果全部实现,golang应该超出python代码一倍多。
python运行时使用cpu 2%,可以改为多线程,这样开30个线程效果应该不错。
golang速度慢稍后再做性能分析,看看具体问题。

1月 24

python调用golang编译的动态链接库

当前任务:抓取页面,然后删除回车,tab和空格,然后打印出来。
最初是在raspberry上做的测试。使用新浪作为测试网站。

python部分文件名 gradAndDel.py

使用时间如下
real 0m2.878s
user 0m1.910s
sys 0m0.240s

golang文件名gradAndDel.go

使用时间如下:
real 0m0.718s
user 0m0.290s
sys 0m0.090s

使用golang比python快差不多4倍(使用requests模块抓取显示中文乱码,暂时没有找原因)。

golang1.5后可以将go语言编译为动态链接库。
这样使用python处理业务逻辑,然后调用golang的动态链接库加速执行速度。
但是在raspberry pi上调用的时候报段错误。没有细查,直接放到64位Linux服务器上测试。

要产生动态的链接库的golang代码gradAndDelso.go

编译命令
go build -buildmode=c-shared -o gradAndDelso.so gradAndDelso.go

编译完成会产生两个文件,一个so和一个h文件。
使用python调用golang动态链接库部分,代码文件userGoSo.py

使用时间
real 0m0.893s
user 0m0.068s
sys 0m0.024s

在64位的服务器上python、golang和python调用golang的动态链接库速度基本上一样没有区别。
如果是处理复杂的运算golang应该比python快很多,实际项目中可以试试。
golang开发的代码量比python还是大不少,编译后的文件有6M,动态链接库8M,个人感觉这部分太大了。

本文源码打包pythonUserGolangLib

1月 15

raspberry pi 源码安装 golang1.5

  从golang.org下载go1.4.3和go1.5.3。解压到/usr/local/目录中。go1.4.3目录为go1.4,go1.5.3目录为go1.5。

sudo su #到管理员权限

apt-get install -y mercurial bison gcc gccgo libc6-dev ed gawk make git #安装需要的库

以下为在管理员权限下,使用的命令记录。
export GOARM=5
export GOROOT=/usr/local/go1.4
export GOARCH=arm
export GOOS=linux
export PATH=$PATH:$GOROOT/bin/

cd /usr/local/go1.4/src/
time ./all.bash

mkdir -p /usr/local/go1.5/bin
cd /usr/local/
ln -s /usr/local/go1.4 /usr/local/go-bootstrap
export GOROOT_BOOTSTRAP=/usr/local/go-bootstrap
export GOROOT=/usr/local/go1.5
export PATH=$PATH:$GOROOT/bin/
cd /usr/local/go1.5/src
time ./all.bash

如果没有报错则编译完成。我的记录
go1.4.3编译时间为54分钟 go1.5编译时间160分钟

/etc/profile增加如下内容
export GOARM=5
export GOROOT=/usr/local/go1.5
export GOPATH=/usr/local/go1.5/pkg
export GOARCH=arm
export GOOS=linux
export PATH=$PATH:$GOROOT/bin/

配置生效
source /etc/profile

在系统中可以使用go version看看版本的正确性