10月 15

无聊的内存操作

  今天一哥们说他内存曲线是均匀锯齿状。这对python太简单了,就是对内存添写和释放就行。我无聊之下写了下面的代码。

import StringIO
import time

for i in range(100):
    context = a * 2048 * 100000
    a=StringIO.StringIO(context)
    time.sleep(2)
    a.close()
    context = b * 1024 * 10
    a=StringIO.StringIO(context)
    time.sleep(1)
    a.close()

内存图形如下:
内存图形

9月 23

python到mysql 2006问题解决

  tornado和Django框架都是使用MySQLdb,在长时间不与数据库有交互,如采集、SQL运行数据过大而数据库等待时间过短等,这时会报“Error 2006: MySQL Server has gone away”错误。收集了网上的三个解决方案是,
  一、修改数据库的参数wait_timeout,interactive_timeout到2880000,
  二、在每次连接时做判断,如果报错将再连接一次(http://xulizhao.com/blog/python_db)。

class DB:
    conn = None
    def connect(self):
        self.conn = MySQLdb.connect(localhost,root,pass,test)
    def cursor(self):
        try:
            return self.conn.cursor()
        except (AttributeError, MySQLdb.OperationalError):
            self.connect()
            return self.conn.cursor()

  三、定时进行连接,以防断开

from tornado.ioloop import PeriodicCallback

#torndb.Connection(host, database, user=None, password=None, max_idle_time=25200, connect_timeout=0, time_zone='+0:00')
db = torndb.Connection(db_ip, db_database, db_user, db_pass, db_conn_time)
# https://github.com/felinx/poweredsites/blob/master/poweredsites/db/mysql.py
# ping db periodically to avoid mysql go away
PeriodicCallback(db.query(show variables), 3600*4*1000).start()

我的测试,第一种方法比较好用,但是在某些情况下会造成其它问题。第三种效果不理想,需要继续研究。第二种正在试验中。

9月 10

开源的webdeploy部署系统

介绍
  Web部署工具。主要针对小型网络环境进行,有部署、回退、权限管理、日志记录等功能。
  此部署系统是用Python2.6(以上)+Tornado开发,以调用命令的方式进行工作,用WEB界面形式进行管理。该系统需要用到第三方工具,如ssh、rsync等。所使用到的第三方工具的安装,都已经编写在安装脚本中,只要在能连接互联网的机器上可以使用安装脚本自动完成。但是基础的python环境需要手动安装,如果系统自带的版本过低,建议安装新版本(该系统还不能使用python3.x)。该工具使用推送和远程调用命令方式,所以没有agent端,部署配置后既可以使用。由于属于个人开发,所以我的操作系统为CentOS、raspberry pi、pcduino。
所用到的模块示意图如下:
deploy_tool模块20130906
  该系统可以单进程或多进程进行部署,多进程是使用线程方式进行控制,建议为3个不要超出。在单进程情况下10个Tomcat服务部署完毕(传送文件网络耗时按3秒钟算)大约一分钟,因为tomcat需要重启耗时比较长,所使用时间大约是php、python、ruby类代码的3倍。使用多线程部署Tomcat类大约要35-40秒。此系统对于JAVA依赖于tomcat的服务适合在20个左右的服务环境中使用。脚本类的大约在50到60个服务环境使用。如果想以更快的方法,部署跟多的服务器,可以使用推送部署脚本的方式进行,后面在做介绍。
注意两点:1)以上所说服务环境是指服务程序部署的套数,而不是物理服务器的台数。
2)如果部署tomcat下的服务,为了避免因为环境变量造成的问题,需要编写一个适合远程使用脚本。可以http://www.simonzhang.net/?p=1951

安装介绍
安装环境要求
  操作系统:CentOS 或Raspberry pi 。基础运行环境:python2.6或python2.7。数据库:mysql。
  原则上可以运行在任何python2.6以上版本搭建的linux服务器上,但是本人只测试了CentOS和Raspberry pi。演示环境为Raspberry pi。

安装步骤
  首先创建数据。数据库创建部分不详细记录。如获得数据库信息:账号:deploy、密码:123456、库名为:deploytest、数据库IP为:192.168.1.130。数据库使用UTF-8编码。
  将deploy代码放到相应目录中。(提醒:因为此系统安装需要安装第三方的框架和工具,建议在root权限下安装,并且装过程需要连接互联网)。测试过程将代码放置到/program/deploytest目录中。
  开始安装。进入部署工具下的install目录,给install.sh可执行权限后并运行。执行效果如下:
deploy_tool_install
  红字部分为系统的安装提示,黑色字为输入信息。信息输入完点击回车。当系统id输入点击回车后系统开始安装。需要注意的部分“Domain Name”、“local global ip”和“local global port”的关系。“Domain Name”可以是外部访问域名,也可以是直接访问的IP+端口的地址,如果为域名需要前端有使用80端口WEB服做映射,如apache、nginx等。“local global ip”为WEB服务映射的地址,“local global port”为WEB服务映射的端口,在部署系统启动时此端口会被部署系统占用。
  如安装脚本没有报错,则安装完成,系统自动启动。如果自动系统失败,可以尝试下面的操作。
  退到部署系统的根目录,使用命令”chmod 755 main.sh”给启停脚本可执行权限。使用命令“./main.sh start”启动服务,如看到“start ok!”则为启动成功。如果失败还可以手动启动,可以下载说明文档。
整个系统压缩后31KB。是个小型的Web部署工具。如有问题可以发邮件给我,大家互相学习。
google直接下载方法:svn checkout http://my-webdeploy.googlecode.com/svn/trunk/ my-webdeploy-read-only
部署工具说明文档-20130910
webdeploy-5.zip

8月 29

pcduino使用心得对比raspberry pi

之前一直在用raspberry pi,为了试验方便今天又买了一个pcduino。两者做个对比。

优点:
1)pcduino使用TF卡,而raspberry pi使用SD卡。如果想raspberry pi美观点使用TF卡,还需要买相应的卡托。
2)pcduino的运行速度要比raspberry pi快。编译同样的go的版本raspberry pi用49分,pcduino用42分钟。
3)有python,升级安装工具是apt-get,直接用之前raspberry pi初始化安装的脚本,修改一下就跑起来了。
4)pcduino与arduino的链接会更方便一些。

缺点:
1)pcduino的系统安装比raspberry pi麻烦,需要先烧内核,然后再安装系统。
2)pcduino的体积比raspberry pi大出不少,宽度都是5.5cm,但是pcduino的长度是12.5,raspberry pi是8.5.
3)感觉pcduino的做工不如raspberry pi 原产的做工好,pcduino比较粗糙。
4) 板载的2G初步感觉有点鸡肋。如果要学习linux、python、golang、mysql、C等装上就没有空间了,必须要用SD。
以后再研究看看,是否能做个什么来辅助内存。