1
SJ2050cn 2021-05-05 19:07:01 +08:00 1
pypy 在 io 处理上确实快很多,我试了开 100w 个协程,每个协程要做的也很简单,就是休息 1s,最后统计 100w 个协程结束时间,同样的代码用 pypy 和 cython,pypy 基本在 1s 稍微多一点,cython 就得好几 s,pypy 处理原生数据结构是真的快,但处理像 numpy 底层本来就是用 c++/fortran 写的,貌似感觉不出太多差距,并且好多库还不支持 pypy 版本,例如科学计算常用的 scipy 库,不过 numpy 已经有 pypy 版,未来肯定适配的越来越多。总而言之,pypy 就是让你在不改动任何代码情况下提升性能的手段,如果有代码运行确实慢,可以先无脑试试这。
|
3
billlee 2021-05-05 19:28:20 +08:00
不兼容生态里大量的 C 扩展
|
4
no1xsyzy 2021-05-05 21:04:54 +08:00
只支持到 3.7 (所以我没用它
|
5
Jirajine 2021-05-05 21:24:53 +08:00 via Android
jit 性能不稳定,尤其是冷启动的时候比解释器慢很多。
|
6
ALLROBOT 2021-05-05 21:43:01 +08:00
亲自用用一个月,看哪个方便就用哪个,就这么简单
|
7
luozic 2021-05-05 21:44:06 +08:00
pypy 的 jit 实现优化上面离 jvm clr 甚至 v8 都差得比较远,不少地方比 cpython 没快多少。 并且 pypy 还是没有移除 GIL 的,比 cpython 快的是 io 场景和 python 内部数据场景。
|
8
LeeReamond 2021-05-06 07:50:55 +08:00 1
这个问题可以分为几个方面。单纯表现上,pypy 在主流编程语言的 jit 解释器里基本排在最后一名或者倒数第二名,不过客观上讲这不是由于 pypy 技术落后,单纯是因为 python 本身是一门非常动态的语言,这给 jit 带来了很多难题,即使使用了 partial evaluation 等技术,同样难以优化到 java jit 的水平线。
不过 pypy 项目的存在本身也是开发效率即解释效率的一个例子,很多人坚持否认的,认为高效开发无用,实际上 pypy 已经出来这么多年而 cpython 的 jit 仍然在难产足以说明问题。可以想见的是如果 python 的一些现代特性被早一些加入的话,各应用领域(比如 web )当中的市场份额可能会有大翻转,这也体现出互联网项目推广中的时也运也的一面。 具体坑的层面的话,一个共识是 python 一直以来的运行生态,从不依赖于 jit,可以看得出来 guido 从设计层面认为 ffi 扩展相比于始终不理想的 jit 是更好的解决方案,这也造成了目前的 py 生态。而 pypy 的 cffi 效率和兼容性差几乎成为制约其发展的主流因素,这也是为什么 pyston 这种提升很少性能,但具有完整嵌入支持的项目,即使仍在闭源状态,许多人仍然更看好它的因素。 python 优化的另一个方向可能是最近的 mypyc 项目,我觉得这个方向是对的,一如当初 cython 在 py 中引入类型后效率直接起飞一样,虽然这套方案在今天已经有更好的选择。很多事情如果程序员能低成本地实现,那么不要交给程序,程序处理起来反而会很复杂。 |
9
LokiSharp 2021-05-06 09:41:48 +08:00
说实话用 pypy 我还不如直接换个语言写。没有 CPython 那些 C 扩展,性能也只有小幅提升。
|
10
SlipStupig 2021-05-06 10:34:07 +08:00
@SJ2050cn pypy 现在能用 sklearn pytorch tensorflow 了嘛?一直不换的原因就是不支持机器学习相关库
|
11
jones2000 2021-05-06 11:57:46 +08:00
你这个是怎么测试的,cython 直接在 c++代码里面开并行,是很快的, 不要跟外部 py 有太多交互,py 只提供数据给 c++和接收++计算完的数据。一般 py 慢, 直接用把逻辑全部迁移到 c++里面, 通过 cython 封装下接口,主要是接收 py 数据和返回计算结果给 py 。 其他全部 c++搞定。
|
12
SJ2050cn 2021-05-06 22:08:04 +08:00
@SlipStupig 没用过这些库,不清楚,大概率不支持
|
13
necomancer 2021-05-07 21:50:30 +08:00
@SJ2050cn 和 numba.jit 比呢?我好久没碰过 pypy 了,上一次用还是 numpy 只支持 pypy2……
|
14
roundgis 2021-05-14 23:50:13 +08:00 via Android
14 年開始一直用 pypy 運行後端
綜合性能大約是 cpython 2-2.5x 之間 近年來 cpyext 有了很大改善 numpy scipy 都可以運行了 雖然速度還是有些慢 |