随意试了下 pypy 和 Cpython 对比 性能叼炸天啊, 敢问有人把它用在生产环境中了吗?

2014-09-23 16:42:44 +08:00
 geew
15989 次点击
所在节点    Python
16 条回复
pyKun
2014-09-23 16:44:55 +08:00
楼主测的什么case?
geew
2014-09-23 16:52:07 +08:00
照着网上的例子随意跑的,开始没觉得差距这么大

例子:
https://gist.github.com/anonymous/31c99d0ce30080a158f2

结果:
:~$ python t.py
total run time:
14.747013092
:~$ pypy t.py
total run time:
1.07921886444
awanabe
2014-09-23 17:16:15 +08:00
这个也就是pypy的JIT的作用了吧...
awanabe
2014-09-23 17:16:53 +08:00
再加一句...重IO的就不太适用了...重计算的还是可以尝试的
geew
2014-09-23 17:25:32 +08:00
@awanabe 能详细说说吗
eriale
2014-09-23 17:30:01 +08:00
重IO的瓶颈不在计算上,Livid换过,瓶颈不在python解释器,而是mysql
geew
2014-09-23 17:35:59 +08:00
@eriale 好吧 还是redis靠谱了
CMGS
2014-09-23 17:37:15 +08:00
CPU bound的有效,IO bound的……少侠还是 tornado + pypy吧……
geew
2014-09-23 18:40:20 +08:00
@CMGS 怎么着 mysql也是瓶颈
mengzhuo
2014-09-23 19:04:25 +08:00
pypy请看看内存用量

3倍
geew
2014-09-23 19:05:52 +08:00
@mengzhuo 空间换时间咯
CMGS
2014-09-23 22:32:40 +08:00
@mengzhuo 。。GC策略PYPY和CPY不一样。。。要调整的
@geew mysql用异步库就行了,算不上瓶颈……无论是兼容tornado的还是兼容gevent的,工程上已经有了不少可靠的解决方案
awanabe
2014-09-23 23:36:18 +08:00
@geew 只是举个例子, 描述下大致运作的规则.
你的例子中, 重复1000000次, JIT处理的时候, 就会缓存这段代码. 节省了字节流->机器码的转换. 类似于这样的, 对于计算, 细粒度的比如 1+1之类, 可以缓存结果. 那就省了很多CPU, 所以快在这里面.

对于web服务器, 很多是对于DB, 缓存读取. 遇到这样的IO请求, 就会阻塞. 这个时候只能等待.
可以看下 @CMGS 提供的 tornado + pypy, 虽然tornado主打异步, 不过tornado的mysql也是阻塞的, 如果用到mysql, 瓶颈还在mysql.

以上差不多, 就是解释下 "重IO的就不太适用了...重计算的还是可以尝试的"
geew
2014-09-23 23:41:01 +08:00
@awanabe 嗯 谢谢 讲得很详细了
sujin190
2014-09-24 19:40:15 +08:00
@awanabe 可以考虑用来greenlet实现mysql异步,我想pypy对tornado效果应该还是不错的
nooper
2014-09-28 17:11:45 +08:00
cython 需要内存管理和gil 机制。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/135195

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX