V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
huzhikuizainali
V2EX  ›  Python

pypy 优缺点是什么?

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

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

    近年來 cpyext 有了很大改善

    numpy scipy 都可以運行了

    雖然速度還是有些慢
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5196 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 05:42 · PVG 13:42 · LAX 21:42 · JFK 00:42
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.