pypy 优缺点是什么?

2021-05-05 18:58:50 +08:00
 huzhikuizainali
今天看一个介绍说 pypy 比自带编译器快很多。但是我想这应该不是没有代价的。用过 pypy 的同学可否分享一下?
3972 次点击
所在节点    Python
14 条回复
SJ2050cn
2021-05-05 19:07:01 +08:00
pypy 在 io 处理上确实快很多,我试了开 100w 个协程,每个协程要做的也很简单,就是休息 1s,最后统计 100w 个协程结束时间,同样的代码用 pypy 和 cython,pypy 基本在 1s 稍微多一点,cython 就得好几 s,pypy 处理原生数据结构是真的快,但处理像 numpy 底层本来就是用 c++/fortran 写的,貌似感觉不出太多差距,并且好多库还不支持 pypy 版本,例如科学计算常用的 scipy 库,不过 numpy 已经有 pypy 版,未来肯定适配的越来越多。总而言之,pypy 就是让你在不改动任何代码情况下提升性能的手段,如果有代码运行确实慢,可以先无脑试试这。
Anybfans
2021-05-05 19:15:16 +08:00
@SJ2050cn #1 但是好像 pypy 比较占内存
billlee
2021-05-05 19:28:20 +08:00
不兼容生态里大量的 C 扩展
no1xsyzy
2021-05-05 21:04:54 +08:00
只支持到 3.7 (所以我没用它
Jirajine
2021-05-05 21:24:53 +08:00
jit 性能不稳定,尤其是冷启动的时候比解释器慢很多。
ALLROBOT
2021-05-05 21:43:01 +08:00
亲自用用一个月,看哪个方便就用哪个,就这么简单
luozic
2021-05-05 21:44:06 +08:00
pypy 的 jit 实现优化上面离 jvm clr 甚至 v8 都差得比较远,不少地方比 cpython 没快多少。 并且 pypy 还是没有移除 GIL 的,比 cpython 快的是 io 场景和 python 内部数据场景。
LeeReamond
2021-05-06 07:50:55 +08:00
这个问题可以分为几个方面。单纯表现上,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 中引入类型后效率直接起飞一样,虽然这套方案在今天已经有更好的选择。很多事情如果程序员能低成本地实现,那么不要交给程序,程序处理起来反而会很复杂。
LokiSharp
2021-05-06 09:41:48 +08:00
说实话用 pypy 我还不如直接换个语言写。没有 CPython 那些 C 扩展,性能也只有小幅提升。
SlipStupig
2021-05-06 10:34:07 +08:00
@SJ2050cn pypy 现在能用 sklearn pytorch tensorflow 了嘛?一直不换的原因就是不支持机器学习相关库
jones2000
2021-05-06 11:57:46 +08:00
你这个是怎么测试的,cython 直接在 c++代码里面开并行,是很快的, 不要跟外部 py 有太多交互,py 只提供数据给 c++和接收++计算完的数据。一般 py 慢, 直接用把逻辑全部迁移到 c++里面, 通过 cython 封装下接口,主要是接收 py 数据和返回计算结果给 py 。 其他全部 c++搞定。
SJ2050cn
2021-05-06 22:08:04 +08:00
@SlipStupig 没用过这些库,不清楚,大概率不支持
necomancer
2021-05-07 21:50:30 +08:00
@SJ2050cn 和 numba.jit 比呢?我好久没碰过 pypy 了,上一次用还是 numpy 只支持 pypy2……
roundgis
2021-05-14 23:50:13 +08:00
14 年開始一直用 pypy 運行後端

綜合性能大約是 cpython 2-2.5x 之間

近年來 cpyext 有了很大改善

numpy scipy 都可以運行了

雖然速度還是有些慢

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

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

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

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

© 2021 V2EX