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

没人讨论下最近热门的 Codon 和 socketify.py

  •  
  •   ClericPy ·
    ClericPy · 2022-12-12 19:49:20 +08:00 · 5323 次点击
    这是一个创建于 737 天前的主题,其中的信息可能已经有所发展或是发生改变。

    https://github.com/exaloop/codon

    https://github.com/cirospaciari/socketify.py

    前者机器之心推文提到百倍提速的 Python 编译器(有点像上次那个太极 taichi), 后者高性能网络编程库. 这俩的 Benchmark 真猛

    最近几个月折腾 asyncio 处理 TCP, 协程真是舒服

    PS: 现在讨论 Python 的越来越少了, 都转别的了么

    18 条回复    2022-12-18 09:14:40 +08:00
    janxin
        1
    janxin  
       2022-12-12 20:03:28 +08:00
    前者应该是很多人尝试做过的道路

    后者用的 hpy 看上去有点意思。

    不过现在更看重效率、可靠性和可拓展性了,效率太高,我也没那么多用户啊
    ClericPy
        2
    ClericPy  
    OP
       2022-12-12 22:51:08 +08:00
    @janxin

    以前直接上 pypy3, 确实明显提速, 不过跟不上官方大版本, 暂时没继续用, 当绿色版解释器挺好. pyston 之类的就没继续试

    后来试了 nuitka 感觉函数有些提速, 但是协程啥的反而性能损失了一小半

    后来又试了 3.11, 比 3.8 快的确实明显, 程序启动和几个缓存的设计都挺有意思的

    后来看到 taichi, 试了下, 至少我的代码没啥明显变化, 貌似还有些限制... 今天机器之心推送看到 codon, 去官网看又是 gpu 加速又是一些前提条件的, 暂时只敢观望, 也没见到有人聊聊到底咋样

    后来周报里看到 socketify, 还在观望, TCP 上对 Python 来说性能一直不是问题, 协程+reuse_port 足够用了, 不知道这库有什么前景没有, 毕竟被好几个 "考试大师" 类的 web 库坑过好几次了

    hpy 很早以前见到了, 一直没尝试, 有啥意思啊?

    确实, 代码写到一定阶段发现, 性能真从来都不是事, 软件架构和技术选型反而是杀伤更大的坑... 早年写的代码不管维护重构多少次, 第二年看全都像屎山
    superbai
        3
    superbai  
       2022-12-12 23:06:33 +08:00
    OP 是用 Python 做什么场景的业务?感觉对性能很看重但是又用了 Python ,比较好奇
    ClericPy
        4
    ClericPy  
    OP
       2022-12-12 23:44:59 +08:00 via Android
    @superbai
    最近处理 asyncio 做流量转发调度相关,还有 TCP 日志啥的,两个都几千 qps 处理一大堆 TCP ,以前折腾 hadoop steaming 跟爬虫,那时候才真是天天被逼着砍配置...
    pefan
        5
    pefan  
       2022-12-13 01:16:16 +08:00 via iPhone
    HN 上有人试用第一个,不过 import numpy 就卡住了。
    lookStupiToForce
        6
    lookStupiToForce  
       2022-12-13 11:53:48 +08:00
    第一个项目自己也提到了需要大型库自身对 Codon 提供支持才行,目前来看还属于星星之火,是否能燎原依然看大型库的开发者,可以想见要轮到普通开发者使用还遥遥无期
    shinession
        7
    shinession  
       2022-12-13 20:13:55 +08:00
    看到 taichi 就不想去试了,之前就因为 pandas 没办法导入,搞了好久放弃了.这么常用的库都不支持,我都好奇到底支持什么库
    ClericPy
        8
    ClericPy  
    OP
       2022-12-13 20:18:21 +08:00
    @pefan
    @shinession
    @lookStupiToForce

    所以这么些各种提速, 限制还是大. 目前还是针对特殊场景优化的, 想用通用型的还是走 pypy pyston 之类的方案? mypyc 看到很久了还没试不知道靠谱不靠谱

    好几次想 all-in golang 但还是舍不得...
    Vavrines
        9
    Vavrines  
       2022-12-14 01:07:16 +08:00   ❤️ 1
    我还以为只有我这种做科学计算的会关心性能,这里目前还是 numba 最开箱即用
    codon 的集赞速度让我觉得他们可能更适合开一家公关公司...
    jjx
        10
    jjx  
       2022-12-14 10:00:46 +08:00
    codon 说是 python 编译器感觉有点误导 其实就是个新语言
    vicalloy
        11
    vicalloy  
       2022-12-14 16:28:15 +08:00
    试着 import 了一下标准库,连 logging 都过不了。
    感觉离真正的实用还有很大一段距离。
    而且根据协议只是个人使用免费。
    谨慎观望中。
    ClericPy
        12
    ClericPy  
    OP
       2022-12-14 20:30:54 +08:00
    @Vavrines 今天手撸归并排序的变种, 不开多核真拙急... 性能这东西肯定还是越高越好

    综上所有人所述, Python 求性能还是老老实实三板斧吧
    penguinWWY
        13
    penguinWWY  
       2022-12-15 19:45:08 +08:00   ❤️ 1
    看了下 Codon 的实现,目前只能算是个玩具
    这个思路有点像前几年在 js 上做 Code smells and type analysis —— 只要用户写出非常易于优化的代码,我就可以优化的非常好。
    learningman
        14
    learningman  
       2022-12-15 21:31:36 +08:00   ❤️ 1
    codon 正在试,感觉是另外一语言,只是和 python 很像,能 interop 罢了

    benchmark 都跑不通。。。

    https://gist.github.com/Zxilly/b5d909d48ec283e514765afee32a3b14
    penguinWWY
        15
    penguinWWY  
       2022-12-16 10:45:35 +08:00
    @learningman 需要环境变量 CODON_PYTHON ,用来指定 libpython
    learningman
        16
    learningman  
       2022-12-16 20:57:17 +08:00
    @penguinWWY #15 跑通了,还是慢,因为他没写浮点库还是在 python 跑的。
    估计过两年再来看好点,现在还是个玩具能有 3k star 挺离谱的
    NoAnyLove
        17
    NoAnyLove  
       2022-12-18 02:02:16 +08:00
    对于 codon ,我记得以前 Google 有类似的项目 Grumpy ,尝试将 Python 编译成 Go ,可惜又是一个被放弃了的项目。从使用上来说,感觉有点类似 Numba ,不过将 LLVM 扩展到了整个程序(虽然一个用的是 JIT ,一个用的是 AOT ),但是理论上应该都只能对某些特定语法的加速。另外,这是一个商业开源项目,希望有商业公司的支持下发展能够好一些吧。但目前看来,似乎还没有发展到可以用于生产环境中的程度。

    @ClericPy
    #2 pyston 最大的问题是 ABI 不兼容,原生扩展需要重新编译,如果只是个玩具项目还行,但如果真用在生产环境中,编译扩展就变得非常麻烦。即使有 conda 提供了一些编译好了的 Pyston 扩展包,还是有很多需要自己处理的。相比之下,衍生出的 pyston-lite 反而更加易用,只需要安装一个额外的扩展就能启用 JIT ,虽然性能提升不如 pyston-full ,大概只有 10%-15%,但相当于白捡的啊。

    一直想试试 nuitka ,不过没找到合适的机会。 不过为啥协程反而性能降低了?另外,能不能江一下为啥 reuse_port 在这里有用? hpy 感觉只是一个针对不同 Python 实现( CPython ,PyPy ,GraalPython )的一个通用 API 抽象层,对性能应该没啥英雄吧。

    #8 特殊场景优化比较麻烦,但是也比较有意思。我觉得性能优化需要区分优化负载和优化延迟。前者是优化性能使其可以处理更多的工作,更高的并发,等。后者则是优化性能使其更快完成响应。

    #12 哪三板斧?

    @learningman #14 benchm 跑 Decimal 没意义,Decimal 基本上都是调用_decimal 的 C 扩展,都不算是 Python 代码了。可以换成_pydecimal 试试。
    ClericPy
        18
    ClericPy  
    OP
       2022-12-18 09:14:40 +08:00
    @NoAnyLove reuse_port 当时说的其实就是多核+协程... 没啥特殊的

    nuitka 协程性能降低我也不能太确定是不是测试代码的问题, 高并发单核协程时候, 同一套代码原生 Cpython 测试好几次都比编译好的 .exe 好不少, 没具体去试, 不过纯粹的循环和函数 nuitka 里有提升, 却也没到好几倍那么明显.

    三板斧还是讨论了好多年把 Python 当胶水的其他语言动态链接库 / Cython / pypy(pyston 之类的), 这么多年了最稳定的还是这几个, 好几个 Benchmark 好看的库也基本都是 Cython 或者 rust 写模块

    Python 追求性能看来短期内还是没有特别大的惊喜
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1189 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 63ms · UTC 18:01 · PVG 02:01 · LAX 10:01 · JFK 13:01
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.