冰果

技术群:26678700     
交流QQ: 704839634
合作: 1) 可兼职远程办公开发; 2) 有一套Go+Python开发的行业短信云平台可合作;3)目前正在开发物联网、大数据平台。

开发笔记1

                                         开发笔记1     2012-5-3        周四

       python开发一个数据同步程序,把各地市系统里的部分数据表变化,同步到省局中心数据库去,便于全省统计分析。
       可以c++, java, python, perl来实现,最后选择python,数据库访问库自然采用MySQLdb, 我要快速实现。
       功能够简单,synccli.py---->syncsrv.py.
       出现两个问题需要记录下:
       1) MySQLdb内存泄漏问题:
        MySQLdb.connect(host=db_host, port=db_port, user=db_user, passwd=db_pwd, db=db_name) 
           ----没问题
        MySQLdb.connect(host=db_host, port=db_port, user=db_user, passwd=db_pwd, db=db_name, charset=db_charset)
           ----指定一个编码charset, 内存泄漏非常严重,一个压力测试下去,1G内存很快玩完。
        MySQLdb.connect(host=db_host, port=db_port, user=db_user, passwd=db_pwd, db=db_name, charset=db_charset, use_unicode=False)
           ----指定一个编码charset,  同时use_unicode=False,又没有问题了。
        搞不清楚怎么这个bug没有解决,也没时间去看MySQLdb源代码,它也不过调用mysql的c库,c库是没这个问题的,可能在编码转换时没处理好。
        所以如果要指定编码时,如我们常常要gbk或utf,那就一起用use_unicode=False。

       2)   MySQLdb查询更新缓存问题:
       这个问题今天困扰了我小半天,我在navicat上对某字段进行update, python代码里竟然没有变化,以前没有出现这个现象的,总查自己代码那里搞错了。
      后来网上查查,也有人碰到,说是要调用commit()。
      原来是这次mysql建立数据库时,用的是InnoDB,以前都是用MyISAM,我都不喜欢用InnoDB,合作方用到InnoDB,没办法,代码里也没有真用到事务。
      MySQLdb行为还真是的,查询也要调用commit(), 非常思维啊。
      代码是加上conn.commit()之后就问题解决了,不知道有什么后遗症没有,不管了,等测试组去长久观察。

posted on 2012-05-03 19:57 冰果 阅读(1547) 评论(0)  编辑 收藏 引用 所属分类: Python


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理