资讯专栏INFORMATION COLUMN

改用pypy运行django项目

_Zhao / 2593人阅读

摘要:最近在研究编程,写了个,试了试,比用流量大了好几倍,简直吓死宝宝了。但是项目就是跑不起来,一直报的错误,说是无此包。

最近在研究socket编程,写了个echo server,试了试pypy,比用python2.7流量大了好几倍,简直吓死宝宝了。本地跑网络相关的程序基本没有拥塞,所以主要就相当于测试CPU了,感觉主要是节省了线程和循环开销,可能是pypy的某种优化吧

无事时我便自己尝试将在公司的项目代码在本地改用pypy跑,毫无疑问会碰到一些困难,但这比从头开始用pypydjango项目还是受益得多。官方号称快大概7倍(大误)

首先是包的问题,平常装的包都在py2的路径下,所以直接在pypysite-packages下建一个.pth文件把py2的包拿来用。进入pypy的包文件夹

/usr/local/Cellar/pypy/4.0.1/libexec/site-packages

新建一个文件叫external.pth,加入两行

/Library/Python/2.7/site-packages
/usr/local/lib/python2.7/site-packages

这样确实可以使用部分用pure python写的包了,但是有些用clang写的就不行了,比如MySQLdb(mysql-python),谷歌了一下,答案千奇百怪,看的官方说是1.2.4c1及以上可以运行。但是项目就是跑不起来,一直报import _mysql的错误,说是无此包。查看发现该库只有_mysql.so文件。
对比着看,如果用py2的话,PyCharm会由_mysql.so生成一个_mysql.py作为缓存,然后就可以使用MySQLdb了,但是用pypy跑的时候生成该文件失败。PyCharm中在Binary Skeletons下有一个.blacklist的文件记录有解析失败的.so文件

我把由PyCharm生成的_mysql.py文件复制一份到py2下的MySQLdb包里,让pypy直接使用它,这样此处就不再报错了,但是其它用了clang的还是报错,这样复制不是办法。继续在网上研究解决方法,然后发现这种用了C语言带.so文件的包不能用拿来主义,通常要通过CFFI的接口来调用(有些包可以直接用),普通C语言写的没有这种接口当然是不行的。另外,用ctypes写的是兼容Cpython和PyPy的

因此安装给pypy用的包最好用其自己的方式,和cpython差不多

pip_pypy

easy_install_pypy

pypy setup.py intall

这样一个个地装包,不过有的还是有问题,比如Crypto,py2装的包是Crypto,但是pypy装的包是crypto,但里面文件import的时候还是用的Crypto,大小写不对。
装完需要的包之后,运行实测,选择一个比较复杂的网页,加载时间由接近1.9s减少到1s内,确实有非常明显地提高

后来还发现一个问题,在上述过程中把由PyCharm生成的_mysql.py放到了py2的MySQLdb下,可以让pypy运行,但再让py2运行则会报错,需要移除

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/37780.html

相关文章

  • python入门 django入门 (一)

    摘要:本人年开发经验,现就职于电信,因工作需要学习,记录自己的学习记录。 本人java10年开发经验,现就职于电信,因工作需要学习python,记录自己的学习记录。后面也...

    hzc 评论0 收藏0
  • Django部署中学到的

    摘要:修改的源的配置文件在文件内容如下豆瓣源的网址是只需将替换为即可。所以这次使用万能的重装大法,来上线这个博客网站。 修改pip的源 pip 的配置文件在 ~/.pip/pip.conf 文件内容如下: [global] index-url = http://mirrors.tencentyun.com/pypi/simple trusted-host = mirrors.tencen...

    CloudwiseAPM 评论0 收藏0
  • Django部署中学到的

    摘要:修改的源的配置文件在文件内容如下豆瓣源的网址是只需将替换为即可。所以这次使用万能的重装大法,来上线这个博客网站。 修改pip的源 pip 的配置文件在 ~/.pip/pip.conf 文件内容如下: [global] index-url = http://mirrors.tencentyun.com/pypi/simple trusted-host = mirrors.tencen...

    bergwhite 评论0 收藏0
  • 细数Python三十年技术演变史——萌发于小众,崛起于AI

    摘要:作者宋天龙来源科技大本营导语一切都始于年的那个圣诞节,的诞生并不算恰逢其时,它崛起充满了机遇巧合,也有其必然性。年的圣诞节,开始编写语言的编译器。年发布的标志着的框架基本确定。年月发布了系列的最后一个版本,主版本号为。 showImg(https://segmentfault.com/img/remote/1460000019862276); 作者 | 宋天龙来源 | AI科技大本营 ...

    tuniutech 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<