在给django项目添加事物管理时遇到的一些问题
:Python    :kukei    :2014-08-13 16:36:51
:评论(0)

今天在给sdcms项目的商品管理模块添加事物控制时发现,使用了各种装饰和with方法以及手动控制事物后依然没回滚,一度让我很迷茫。最后开始怀疑是不是mysql的问题,果然检查了mysql的存储引擎后发现,mysql默认引擎是MyISAM,但是它不支持事物,只有使用InnonDB引擎才行。此时我想起了以前遇见过这个问题,许久不用给忘记了。

解决方法

1.查看引擎

mysql> show engines;
EngineSupportCommentTransactionsXASavepoints
MyISAMDEFAULTDefault engine as of MySQL 3.23 with great perform...NONONO
CSVYESCSV storage engineNONONO
MRG_MYISAMYESCollection of identical MyISAM tablesNONONO
BLACKHOLEYES/d.....
BAE3Python版本上用cache存储django的session的方法
:Baidu    :kukei    :2013-11-04 13:06:52
:评论(2)

Django是一个自带session功能的python版web框架,session的支持存储方式支持memcache,数据库,文件等;当然最快的自然是memcache了,但是当将django应用部署到bae3上的时候会发现,按默认的配置是无法成功运行起来的,原因是bae3提供的cache是非标准memcache接口;

bae3提供的cache接口与标准接口相比有以下两个差异:

  1. cache初始化时需要提供用户名密码;这个可以理解,因为bae3的cache是分布式的,并非和应用在同一主机,bae需要搞清楚那个应用的cache在哪儿部署着呢。

  2. cache的key值必须是string类型,我用unicode就报错了。

鉴于以上的情况我们需要修改一些django提供的session引擎,就是修改setting.py文件中的“SESSION_ENGINE”为自己的类, 比如我就把它改为“SESSION_ENGINE = 'sd.com.lib.se.....

解决IOError: decoder zip not available问题
:Python    :kukei    :2013-05-15 10:33:26
:评论(1)

前一段将换了个vps,将原来的程序部署到新vps后发现在上传图片或生成缩略图时报错“IOError: decoder zip not available”,当时执行的是将png图片制作一个缩略图,而执行其他图片,比如jpg时就没报错,看来是pil的支持组件缺失了zlib部分了。

知道原因就好办了,安装zlib,重装pil,重启uwsgi即可。

第1步:删除已经安装的PIL:

$ rm -rf /usr/lib/python2.5/site-packages/PIL

$ rm /usr/lib/python2.5/site-packages/PIL.pth

第2步:安装JPEG库和FreeType2库

$ apt-get install libjpeg-dev

$ apt-get install libfreetype6-dev

第3步:编译PIL

建议编译之前最好先删除掉Imaging文件夹,重新用tar从压缩包里解压一个干净的安装程序

$ cd .....

BAE-python使用了一段时间后的感受
:Baidu    :kukei    :2013-05-08 09:40:16
:评论(0)

正式将本站迁移到bae上短时间了,之所以能够决定迁移到bae是因为bae-python的性能提升上来了。如果整个页面使用缓存也能够达到50ms的耗时,但实际应用中许多情况是缓存数据然后用数据和模版生成页面,这样耗时为140ms左右, 这样速度我还是挺满意。看到这个效果后我最终决定将本站迁移到了bae。

其实想迁过来还有其他的考量:

  1. 技术支持人员多,交流快捷,无障碍。

  2. 看好百度云平台的发展势头。

  3. 希望能和百度网盘结合起来。

  4. 感觉百度搜索会优先考虑自己平台上的应用,自己感觉。

一些疑问:

  1. bcs流量收费,但是没防盗链,这样就等着被耍流量吧。今天得到回复,下周防盗链可以使用,拭目以待。

  2. 计费资源报表感觉与实际相差太大。我有一个站点,有天不到200的pv,计费统计竟然有4千多的请求次数,40M的流出流量。我的站点一个页面加上各种静态资源有10个左右的请求,但是静态都是走的cdn,所以我的估算不会有这么多请求和流量,亟待沟通。

  3. bcs上个cdn吧。

但是毕竟.....

bae-python架构升级了,性能提升较理想
:Baidu    :kukei    :2013-04-17 20:37:51
:评论(0)

上周bae-python架构升级了,就是在底层框架预加载各种类库,不需要每次访问都加在一次,这样页面的响应时间就打打提升了。根据我自己的感受,同一个应用,响应时间由2.5缩减到了500ms了。可是500ms的不是我想要的,因为在sae上这个应用耗时200ms不到,我希望优化后的耗时至少比sae的小。最后经过cache的优化我的应用耗时到了60ms。

同一个应用在sae上的地址http://quke.org,在bae上的地址://bae.quke.org,下面这张图片是在17ce.com上的速度比较的图片:


上图显示的应用为同一个程序,cache的缓存都打开了,缓存的内容也一样。我们可以看到大部分节点bae都比sae快,总体上bae获胜。

对于这次bae架构升级,虽然在速度上能让人满意,但是还是有几个担心:

1.应用需要预热,需要每个云上都在底层加在了共享的框架。但预热多少次不知道。

2.稳定性不足,就是预热以后仍然偶尔出现耗时2.5s打.....

python在window和linux上目录分割符的问题
:Python    :kukei    :2013-03-01 09:44:54
:评论(3)

我们经常的工作方式是在window下开发和调试代码,无误后发布到linux服务器上运行,这其中会遇到window和linux的差异的问题,其中之一就是目录分割符的问题,如果你在进行目录或文件的操作,你就有感受了,今天特地将python在这两个平台上处理做个测试,记录在此。

window平台上:

Python 2.7.3 (default, Apr 10 2012, 23:31:26) [MSC v.1500 32 bit (Intel)] on win32
Type "copyright", "credits" or "license()" for more information.
>>> import os
>>> path = 'D:\My Works\wkq'
>>> os.chdir(path)
>>> os.getcwd()
'D:\\My Works\\wkq'
>>> os.listdir('D:\My.....
SAE-Python版本正式对外开放了
:Python    :kukei    :2013-03-01 08:51:47
:评论(0)

昨天晚上登陆sae后得到一个推送的消息:

尊敬的用户,您好!
 SAE Python平台正式对外开放啦!
 SAE Python平台于2011年8月开始开发,2012年年初发布测试版,经过一年多的测试升级后,2013年2月底正式结束公测,对外开放。
 即日起,所有SAE用户均可自由创建Python应用。所有Python应用,除流量计费外,HTTP/HTTPS/Cron/TaskQueue的CPU计费项将完全免费。
 SAE Python平台具有以下特点:
  1,完全基于Python2.7,迁移成本低;
  2,完全支持主流框架,Django、Flask等;
  3,支持SAE所有服务,Cron、TaskQueue、KVDB、MySQL、Storage等;
  4,对于商业应用支持代码加密,用户可直接上传pyc;
  5,目前已经有近万应用在其上运行,经过SAE商业应用检验,可靠性高;
  6,低成本,目前仅针对流量做计费,而Python虚.....

PIL的报错之“The _imagingft C module is not installed”
:Python    :kukei    :2013-02-25 09:27:35
:评论(2)

现在sae上的python版本是2.7的准确说应该是2.73,这个版本是python官方在2版本上支持的最新版。而我本机的版本是2.6,在使用上会发现一些本地可以正常运行,而sae上报错的情况,我怀疑是python版本的问题就更新了本地版本到2.73,升级中出现了PIL的错误,解决方法如下:

首先PIL是一个python的图片类库,使用方便,功能强大,但是从官方http://www.pythonware.com/products/pil/下载的2.7的最新版本在使用中报错The _imagingft C module is not installed,具体的说就是如果在程序中引用这几个包时import Image, ImageDraw, ImageFont,会报错,因为官方的包中没包含freetype的原因。

如果是linux系统,解决这个问题就要重新安装freetype,而window平台需要带上freetype重新编译PIL,我.....

python中使用minidom来处理xml(一)
:Python    :kukei    :2013-02-19 16:13:39
:评论(1)

python中用来处理的xml的方法很多,处理简单的xml我们用python自带的xml.dom.minidom即可,下面我们看看如何用minidom来简单的生成和读取xml。

先看如何生成一个xml:

Python 2.6.6 (r266:84297, Aug 24 2010, 18:46:32) [MSC v.1500 32 bit (Intel)] on win32
Type "copyright", "credits" or "license()" for more information.
 
    ****************************************************************
    Personal firewall software may warn about the connection IDLE
    makes to its subprocess.....
python字符串格式化以及转义的一些说明
:Python    :kukei    :2013-02-17 10:34:32
:评论(0)

python字符串格式的方法有多种,使用起来也很方便,举例如下:

#%方式
>>> 'a = %s' % (1, )
'a = 1'
#format方式1,注意序列从0开始
>>> 'a = {1} + {2}'.format(1,2,3)
'a = 2 + 3'
#format方式2
>>> 'a = {b1} + {b2}'.format(b1=2,b2=3)
'a = 2 + 3'

其中%方式中有个情况需要注意,字符串中如果要输出‘%’本身就需要转移否则报错,转移方式为‘%%’,看具体测试代码:

>>> 'a = %s' % (1, )
'a = 1'
>>> 'a =% %s' % (1, )
  
Traceback (most recent call last):
  File "<pyshell#1>", line 1, in <module>
    'a =% %s' % (1, )
T.....