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

2022-12-12 19:49:20 +08:00
 ClericPy

https://github.com/exaloop/codon

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

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

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

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

4963 次点击
所在节点    Python
18 条回复
janxin
2022-12-12 20:03:28 +08:00
前者应该是很多人尝试做过的道路

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

不过现在更看重效率、可靠性和可拓展性了,效率太高,我也没那么多用户啊
ClericPy
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
2022-12-12 23:06:33 +08:00
OP 是用 Python 做什么场景的业务?感觉对性能很看重但是又用了 Python ,比较好奇
ClericPy
2022-12-12 23:44:59 +08:00
@superbai
最近处理 asyncio 做流量转发调度相关,还有 TCP 日志啥的,两个都几千 qps 处理一大堆 TCP ,以前折腾 hadoop steaming 跟爬虫,那时候才真是天天被逼着砍配置...
pefan
2022-12-13 01:16:16 +08:00
HN 上有人试用第一个,不过 import numpy 就卡住了。
lookStupiToForce
2022-12-13 11:53:48 +08:00
第一个项目自己也提到了需要大型库自身对 Codon 提供支持才行,目前来看还属于星星之火,是否能燎原依然看大型库的开发者,可以想见要轮到普通开发者使用还遥遥无期
shinession
2022-12-13 20:13:55 +08:00
看到 taichi 就不想去试了,之前就因为 pandas 没办法导入,搞了好久放弃了.这么常用的库都不支持,我都好奇到底支持什么库
ClericPy
2022-12-13 20:18:21 +08:00
@pefan
@shinession
@lookStupiToForce

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

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

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

benchmark 都跑不通。。。

https://gist.github.com/Zxilly/b5d909d48ec283e514765afee32a3b14
penguinWWY
2022-12-16 10:45:35 +08:00
@learningman 需要环境变量 CODON_PYTHON ,用来指定 libpython
learningman
2022-12-16 20:57:17 +08:00
@penguinWWY #15 跑通了,还是慢,因为他没写浮点库还是在 python 跑的。
估计过两年再来看好点,现在还是个玩具能有 3k star 挺离谱的
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
2022-12-18 09:14:40 +08:00
@NoAnyLove reuse_port 当时说的其实就是多核+协程... 没啥特殊的

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

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

Python 追求性能看来短期内还是没有特别大的惊喜

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

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

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

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

© 2021 V2EX