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

为什么 Python 不做成既能解释执行又能编译执行的语言呢?

  •  
  •   Kongtou · 2018-04-05 20:30:48 +08:00 · 7853 次点击
    这是一个创建于 2406 天前的主题,其中的信息可能已经有所发展或是发生改变。

    这样不就比 java 更快了吗?

    第 1 条附言  ·  2018-04-06 13:11:47 +08:00
    经过我仔细的对比,请问大家 python 对比 Java 有什么优点呢??
    36 条回复    2018-04-08 13:01:06 +08:00
    est
        1
    est  
       2018-04-05 20:43:37 +08:00   ❤️ 2
    你说的是 CPython 吧。Pypy, Cython, Jython, Numba 发来贺电。。。。。。。。。
    ericls
        2
    ericls  
       2018-04-05 20:46:01 +08:00 via iPhone
    性能有问题?

    改架构 优化盈利模式 招人然后自己当老板
    ericls
        3
    ericls  
       2018-04-05 20:46:44 +08:00 via iPhone
    @est pypy 现在兼容性比我之前想象的好多了
    est
        4
    est  
       2018-04-05 20:48:06 +08:00
    @ericls 相当堪用。
    rogwan
        5
    rogwan  
       2018-04-05 20:51:50 +08:00 via Android   ❤️ 2
    绝大部分项目直到下线,都没机会遇上解释器是性能瓶颈的问题,20 年前的 CPU 和内存确实要考虑,现在很多问题直接堆硬件搞定。
    inflationaaron
        6
    inflationaaron  
       2018-04-05 22:40:31 +08:00 via iPhone
    @est 在支持 Numpy 之前只能当个玩具(
    murmur
        7
    murmur  
       2018-04-05 22:44:59 +08:00   ❤️ 1
    python 调用 dll 很方便啊
    涉及性能和安全的地方直接 c 搞定
    cy18
        8
    cy18  
       2018-04-05 23:15:46 +08:00 via Android   ❤️ 1
    Cython 了解一下
    fwee
        9
    fwee  
       2018-04-05 23:19:28 +08:00
    收益不多付出大
    abscon
        10
    abscon  
       2018-04-06 00:46:02 +08:00 via iPhone
    @rogwan 所以黑 Python 的正确姿势不是慢,而是不好维护
    aristotll
        11
    aristotll  
       2018-04-06 01:29:16 +08:00
    你说的是 groovy...
    aijam
        12
    aijam  
       2018-04-06 08:08:05 +08:00
    谁说 cpython 不能编译,python -m compileall .
    ZoomQuiet
        13
    ZoomQuiet  
       2018-04-06 08:52:14 +08:00 via iPhone
    @aijam 是也乎 ╮(╯▽╰)╭

    楼上正解…

    脚本读言本来就是编译运行的啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊
    MrgHOST
        14
    MrgHOST  
       2018-04-06 09:27:57 +08:00 via Android
    @murmur 怎么调用 DLL
    ipwx
        15
    ipwx  
       2018-04-06 10:03:40 +08:00
    xnth97
        16
    xnth97  
       2018-04-06 10:25:15 +08:00
    @inflationaaron 在支持了 http://pypy.org/download.html#installing-numpy 目前没遇到什么问题
    est
        17
    est  
       2018-04-06 10:51:25 +08:00
    @inflationaaron 单支持 numpy 其实楼上说了已经支持了。。问题是其他更多的各种 C 写的库。。。。
    blless
        18
    blless  
       2018-04-06 11:12:04 +08:00 via Android
    @rogwan 性能还是有差距的,尤其是一个进程只能跑满一核。16 核机器用 gunicorn 得开 33 worker …每个进程还要独立的数据库连接 内存消耗等等…总之跟 go 还是用差距的…
    rogwan
        19
    rogwan  
       2018-04-06 11:16:11 +08:00 via Android
    @blless 性能有差距是事实, 不过现在都流行水平扩展,有什么是增加一台机器解决不了的问题吗?
    gnaggnoyil
        20
    gnaggnoyil  
       2018-04-06 11:24:48 +08:00
    @rogwan 能用一台机器带起来的需求为啥要靠加机器解决.大量机器之间的相互同步带来的问题不比它解决的问题少.而且 8102 年了在部分特定领域中论开发效率 Python 并没有显著优势.
    blless
        21
    blless  
       2018-04-06 11:47:32 +08:00 via Android
    @rogwan 额…跟楼上说得差不多… python 关键是一个核就相当于一个节点了… go 语言版本 16 核机器 10 台也就 10 节点… python 就是最少 160 节点了 重启应用的时候…配置数据库瞬间爆炸,然后后续节点可能就启动不了 甚至直接雪崩
    wizardforcel
        22
    wizardforcel  
       2018-04-06 12:13:15 +08:00
    @inflationaaron NumPy 调用了 C 共享库,根本不需要 PyPy 这种东西。

    而且 C 代码里面大量用了 SIMD,可能比 PyPy 优化得还好。
    wizardforcel
        23
    wizardforcel  
       2018-04-06 12:15:50 +08:00
    @Kongtou 论 AOT,有 Cython。论 JIT,有 PyPy 和 Jython。

    我就不明白为啥 LZ 拿最慢的实现来比(虽然它是官方的实现)。
    param
        24
    param  
       2018-04-06 13:06:58 +08:00 via Android
    @ZoomQuiet 咦,大妈
    Kongtou
        25
    Kongtou  
    OP
       2018-04-06 13:12:45 +08:00
    @wizardforcel 我是 python 小白呢
    agagega
        26
    agagega  
       2018-04-06 15:03:36 +08:00
    又不是说编译了就能跟 Java 一样快..
    说起来 MSVC 里 strstr 函数的实现也是蛮力法,不过上了 SIMD,似乎平均表现比 BM 还快
    aminic
        27
    aminic  
       2018-04-06 15:09:17 +08:00 via Android
    大妈清明上 v2ex,要出大事
    est
        28
    est  
       2018-04-06 16:48:58 +08:00
    @blless chain reload 了解一下。。。

    就是一个 worker 重启完毕了再重启下一个。
    murmur
        29
    murmur  
       2018-04-06 23:23:20 +08:00
    @MrgHOST 不是有个 cdll 么
    msg7086
        30
    msg7086  
       2018-04-07 00:13:49 +08:00
    要像 Java 一样快,你为什么不去用 Java ?要像 Go 一样快,你为什么不去用 Go ?
    tomychen
        31
    tomychen  
       2018-04-07 15:45:06 +08:00
    用 Go 吧
    Kongtou
        32
    Kongtou  
    OP
       2018-04-07 16:01:02 +08:00 via Android
    @tomychen 听说 go 性能不如 JAVA
    Kongtou
        33
    Kongtou  
    OP
       2018-04-07 16:03:56 +08:00 via Android
    @msg7086 Python 慢让我莫名难受
    kefengong
        34
    kefengong  
       2018-04-07 17:46:43 +08:00 via Android
    为什么 Go 语言的性能还不如 Java ? http://www.zhihu.com/question/59481694?utm_source=qq&utm_medium=social (分享自知乎网)
    kefengong
        35
    kefengong  
       2018-04-07 17:50:20 +08:00 via Android
    从回答来看 go 在大多数场景 性能比 java 好😁
    msg7086
        36
    msg7086  
       2018-04-08 13:01:06 +08:00   ❤️ 1
    @Kongtou 如果你只是追求速度快(意味着你不追求项目的可维护性,公司是否挣钱,是否容易找到同事等等这些因素),那 Python 的速度的确可能不适合你。

    但是日常开发时,99.999%的公司不会去关心 Python 的性能有多高,因为没有必要去关心。

    我们是用 Ruby 的。前几年湾区大多数的初创企业起手都是 Ruby on Rails,这货比 Python 还要慢,但是大家都在用。谁关心性能?对于企业来说,可维护性,开发效率高不高,以及招人是不是方便,比这点破性能差距不知道要重要到哪里去了。项目维护跟不上,损失的是几十万几百万美元,服务器才多少钱,一个月扔几万美元堆服务器,太便宜了。

    真的要用到性能的地方,老老实实 Go 或者 Java 或者 C 或者汇编。
    可以看看 x264 和 x265 项目,特别是 x265,最近在大规模部署 AVX512 的汇编指令代码,那才是要追求性能时候的正确做法,和手调汇编比,优化编译 C 代码的速度简直太慢了。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3127 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 20ms · UTC 13:53 · PVG 21:53 · LAX 05:53 · JFK 08:53
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.