1
pyKun 2014-09-23 16:44:55 +08:00
楼主测的什么case?
|
2
geew OP 照着网上的例子随意跑的,开始没觉得差距这么大
例子: https://gist.github.com/anonymous/31c99d0ce30080a158f2 结果: :~$ python t.py total run time: 14.747013092 :~$ pypy t.py total run time: 1.07921886444 |
3
awanabe 2014-09-23 17:16:15 +08:00
这个也就是pypy的JIT的作用了吧...
|
4
awanabe 2014-09-23 17:16:53 +08:00
再加一句...重IO的就不太适用了...重计算的还是可以尝试的
|
6
eriale 2014-09-23 17:30:01 +08:00
重IO的瓶颈不在计算上,Livid换过,瓶颈不在python解释器,而是mysql
|
8
CMGS 2014-09-23 17:37:15 +08:00
CPU bound的有效,IO bound的……少侠还是 tornado + pypy吧……
|
10
mengzhuo 2014-09-23 19:04:25 +08:00
pypy请看看内存用量
3倍 |
12
CMGS 2014-09-23 22:32:40 +08:00
|
13
awanabe 2014-09-23 23:36:18 +08:00 2
@geew 只是举个例子, 描述下大致运作的规则.
你的例子中, 重复1000000次, JIT处理的时候, 就会缓存这段代码. 节省了字节流->机器码的转换. 类似于这样的, 对于计算, 细粒度的比如 1+1之类, 可以缓存结果. 那就省了很多CPU, 所以快在这里面. 对于web服务器, 很多是对于DB, 缓存读取. 遇到这样的IO请求, 就会阻塞. 这个时候只能等待. 可以看下 @CMGS 提供的 tornado + pypy, 虽然tornado主打异步, 不过tornado的mysql也是阻塞的, 如果用到mysql, 瓶颈还在mysql. 以上差不多, 就是解释下 "重IO的就不太适用了...重计算的还是可以尝试的" |
16
nooper 2014-09-28 17:11:45 +08:00
cython 需要内存管理和gil 机制。
|