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
vicalloy
V2EX  ›  Python

Python 终于决定要提升一下性能了

  •  1
     
  •   vicalloy ·
    vicalloy · 2021-05-14 11:44:08 +08:00 · 11071 次点击
    这是一个创建于 1049 天前的主题,其中的信息可能已经有所发展或是发生改变。

    根据 PEP 659 , Python 3.11 预计要实现 25%~50%的性能提升。另外 Guido 在 FasterCPythonDark.pdf 中给出的性能提升预期更为激进(每年 50%性能提升,4 年性能提升 5 倍)。

    近期 Pyston 发布了基于 Python3.8 的新版本。Instagram 也发布了自己的性能改良版 Python Cinder 。似乎Python终于想起来性能这回事了。不知道最后能做到什么程度。

    51 条回复    2021-05-17 16:30:06 +08:00
    imes
        1
    imes  
       2021-05-14 11:52:29 +08:00
    聊胜于无,四舍五入等于没变化。Python 的优点向来是上手容易。

    ![等于没有]( https://imgur.com/dcoHCG1)
    LokiSharp
        2
    LokiSharp  
       2021-05-14 11:53:40 +08:00   ❤️ 4
    终于发现自己比 Ruby 还慢了么= =
    janxin
        3
    janxin  
       2021-05-14 12:05:04 +08:00 via iPhone
    主要是微软大爹打钱了,有大腿了!
    learningman
        4
    learningman  
       2021-05-14 12:07:04 +08:00 via Android   ❤️ 3
    @imes 这图谁做的,Go 跑的比 C 还快就离谱。
    agagega
        5
    agagega  
       2021-05-14 12:10:06 +08:00 via iPhone
    @LokiSharp
    我几年前测了下算 fibonacci 的时间:python2<ruby<python3,感觉很离谱
    hronro
        6
    hronro  
       2021-05-14 12:10:43 +08:00
    @imes
    这图确实有点离谱了,Go 是出了名的为了追求编译速度几乎不做什么编译期优化的语言,居然能跑到第一?!
    这图所对应的结果是否有提供可重复验证的测试步骤?
    zjsxwc
        7
    zjsxwc  
       2021-05-14 12:12:34 +08:00   ❤️ 1
    pypy 性能强劲,堪比 C 的性能
    hronro
        8
    hronro  
       2021-05-14 12:21:00 +08:00   ❤️ 1
    @hronro
    看了下图右下角附有仓库地址: https://github.com/niklas-heer/speed-comparison

    去看了下他是怎么测的,结果发现 C 、Rust 、Nim 这些语言都没开编译优化,那结果自然不出所料了。

    (据说 Rust 在 Debug 模式下很可能连 Python 都跑不过)
    Leviathann
        9
    Leviathann  
       2021-05-14 12:26:00 +08:00 via iPhone
    @imes 难怪有人说 go 招黑。。这种奇葩的 benchmark
    rust
        10
    rust  
       2021-05-14 12:39:34 +08:00   ❤️ 1
    @learningman 更离谱的是 Rust 比 PHP 还要慢...
    一个静态编译型无 GC 语言比一个动态解释型有 GC 语言还要慢...
    felixcode
        11
    felixcode  
       2021-05-14 12:44:03 +08:00 via Android
    开局一张图,信口开河
    youthfire
        12
    youthfire  
       2021-05-14 12:47:12 +08:00 via iPhone
    @zjsxwc #7 pypy 兼容性有很多问题,很多第三方库都跑不起来或者报错
    princelai
        13
    princelai  
       2021-05-14 12:54:39 +08:00
    julia 比 python 慢那么多就离谱,jit 编译器第一次跑要预热的,估计测是的人只跑了一遍就直接写结果了吧。
    no1xsyzy
        14
    no1xsyzy  
       2021-05-14 13:06:30 +08:00
    @imes 这图真的是……
    https://xkcd.com/1967/
    LokiSharp
        15
    LokiSharp  
       2021-05-14 13:14:16 +08:00
    @agagega Ruby 虽然慢,但是一直在做优化。Python 3 开始一直在做负优化 Emmmm
    LeeReamond
        16
    LeeReamond  
       2021-05-14 13:25:39 +08:00   ❤️ 3
    其实很多时候不是技术问题,反倒是社会学问题,比如社区的组织形态决定他们能贡献何种方式的代码。python 的社区组织形态导致各自为战的工作者对于语法上的小的优化和改动频繁发表意见,而对于 cpython 解释器这类的问题没什么想法,这是结论其一。

    结论其二是,其实不是社区组织形态的问题,只是有没有钱的问题。。。主流语言基本都有爹,有钱的爹对于语言影响力的推广作用是巨大的,比如你很难想象,guido 这回应该不是开窍了,只是单纯有钱了。。dropbox 虽然不是 flag 那种级别的公司,但也能算个二爹吧。
    karatsuba
        17
    karatsuba  
       2021-05-14 13:28:08 +08:00
    语法糖搞多了被人诟病了,Guido 这不是打自己脸吗
    est
        18
    est  
       2021-05-14 13:31:45 +08:00
    感谢微软!
    leewi9coder
        19
    leewi9coder  
       2021-05-14 13:39:26 +08:00
    感谢微软!
    WilliamYang
        20
    WilliamYang  
       2021-05-14 13:56:54 +08:00   ❤️ 1
    用了 Python 好多年,已经改用 go 了,真的受不了这几年 CPython 一直就是加语法糖,很高兴有 Pyston 这类优化性能又尽量兼容的解释器出现
    efaun
        21
    efaun  
       2021-05-14 14:10:18 +08:00   ❤️ 3
    我认为选择 python 就是为的方便快捷和数据分析,正经追求性能的人谁会用 python 呀!
    leven87
        22
    leven87  
       2021-05-14 14:14:11 +08:00
    @efaun 知乎和豆瓣都是 python 写的,instagram,netflix 也是 python 写的。 语言级别的性能没那么重要
    vicalloy
        23
    vicalloy  
    OP
       2021-05-14 14:22:27 +08:00   ❤️ 2
    @leven87 性能不是决定一个项目成功的关键,但是性能提升还是有必要的。不然 Instagram 也不会去整各 Cinder 出来。Dropbox 用 Python,于是整了各 Pyston 出来。
    SlipStupig
        24
    SlipStupig  
       2021-05-14 14:28:40 +08:00
    @efaun 你目前使用的这个论坛也是 python 写的。。
    TypeError
        25
    TypeError  
       2021-05-14 14:32:47 +08:00
    有钱的是大爷,感谢微软
    ipwx
        26
    ipwx  
       2021-05-14 14:39:21 +08:00
    其实 Python 做数据分析,性能绰绰有余了。。。

    你说要性能?我看了看这两个月写的 2 万多行 C++
    princelai
        27
    princelai  
       2021-05-14 14:43:27 +08:00   ❤️ 1
    我给你们贴张靠谱点的图,数据来源是 https://benchmarksgame-team.pages.debian.net/benchmarksgame

    tabris17
        28
    tabris17  
       2021-05-14 14:49:40 +08:00
    @princelai PHP 很厉害了嘛,Python 竟然连 Ruby 都不如,噗噗
    rahuahua
        29
    rahuahua  
       2021-05-14 14:50:40 +08:00
    @leven87 计算机可不是只能做 web 服务器,就算是 web 服务你用性能更好的语言也更多呀
    fengsien1999
        30
    fengsien1999  
       2021-05-14 15:04:25 +08:00
    @janxin 微软是给 Guido 个人的还是?给了多少?
    hronro
        31
    hronro  
       2021-05-14 16:02:57 +08:00
    @princelai
    benchmarksgame 官网里似乎没有这张图?请问这张图的来源是哪里?
    princelai
        32
    princelai  
       2021-05-14 16:07:13 +08:00
    @hronro #31 我定期爬数据自己做图,matplotlib+seaborn,加权指的是速度+内存使用排名加权
    princelai
        33
    princelai  
       2021-05-14 16:11:11 +08:00   ❤️ 1
    @tabris17 #28 他们测试都是用纯语言去跑,但是实际上 python 的数据分析都是 pandas,numpy,sklearn,scipy 这些,都是经过 C,fortran 优化过的底层,所以不用来跑分,而是实际使用的话是很快的。
    LeeReamond
        34
    LeeReamond  
       2021-05-14 16:28:51 +08:00 via Android
    @princelai 提个意见,应该搞对数坐标,更符合逻辑
    princelai
        35
    princelai  
       2021-05-14 16:33:37 +08:00
    @LeeReamond #34 底下那个时间(秒)其实应该叫做相对时间(倍),如果搞成对数坐标,bar 显示更好看,但是倍数关系会被破坏,变得不直观了,看的人需要反算 exp 推出倍数关系
    szuwl
        36
    szuwl  
       2021-05-14 16:43:48 +08:00
    @princelai Kotlin 不配拥有姓名
    Anybfans
        37
    Anybfans  
       2021-05-14 16:54:23 +08:00
    @zjsxwc #7 测试了一下 pypy 的 md5 比 python3 慢挺多的。都是 3.7 版本
    Evilk
        38
    Evilk  
       2021-05-14 17:31:25 +08:00
    PHP8 + jit.还是很不错的
    charlie21
        39
    charlie21  
       2021-05-14 17:41:54 +08:00 via iPhone
    python 圈子还是有点意思的,一个个的
    harwck
        40
    harwck  
       2021-05-14 17:47:16 +08:00 via Android
    Python 也就图一乐
    chenqh
        41
    chenqh  
       2021-05-14 19:18:41 +08:00
    为什么 ruby 的 jit 是成功的? 减少了特性?还是不兼容 c 扩展?
    chenqh
        42
    chenqh  
       2021-05-14 19:19:11 +08:00
    我只希望 python 能有 php8 的运行速度就可以了
    learningman
        43
    learningman  
       2021-05-14 19:25:49 +08:00
    @Anybfans #37 你测 md5 是在拿 pypy 和 C 比。。。
    levelworm
        44
    levelworm  
       2021-05-14 19:36:49 +08:00
    @princelai 比 Perl 快够了。。。
    chaowang
        45
    chaowang  
       2021-05-14 19:56:56 +08:00
    用 python 谁会在乎性能呢,不都是因为生态还有上手容易吗
    cabbage
        46
    cabbage  
       2021-05-15 03:13:52 +08:00 via Android
    纯语言性能 Python 确实绝对处劣势。不过实际上 py 现在不都当胶水用的嘛,比如大数据用 py 的,多数情况只是在用各种框架各种 binding 而已,pandas,numpy,numba,pyarrow,pyspark… 但是说回来总算正视性能问题了肯定是好事
    Drahcir
        47
    Drahcir  
       2021-05-15 04:42:26 +08:00
    然而 GIL 还在
    zxCoder
        48
    zxCoder  
       2021-05-15 08:40:19 +08:00
    @princelai c# yyds
    viikker
        49
    viikker  
       2021-05-15 11:00:43 +08:00
    性能的重要性越来越低了
    Anybfans
        50
    Anybfans  
       2021-05-16 10:36:00 +08:00
    @learningman #43 看了 pypy 有个更新说是 md5 效率大幅提升。。。
    yy77
        51
    yy77  
       2021-05-17 16:30:06 +08:00
    python 最强的性能提升方法难道不是调用外部的 c++函数嘛。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   952 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 21:06 · PVG 05:06 · LAX 14:06 · JFK 17:06
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.