https://github.com/exaloop/codon
https://github.com/cirospaciari/socketify.py
前者机器之心推文提到百倍提速的 Python 编译器(有点像上次那个太极 taichi), 后者高性能网络编程库. 这俩的 Benchmark 真猛
最近几个月折腾 asyncio 处理 TCP, 协程真是舒服
PS: 现在讨论 Python 的越来越少了, 都转别的了么
1
janxin 2022-12-12 20:03:28 +08:00
前者应该是很多人尝试做过的道路
后者用的 hpy 看上去有点意思。 不过现在更看重效率、可靠性和可拓展性了,效率太高,我也没那么多用户啊 |
2
ClericPy OP @janxin
以前直接上 pypy3, 确实明显提速, 不过跟不上官方大版本, 暂时没继续用, 当绿色版解释器挺好. pyston 之类的就没继续试 后来试了 nuitka 感觉函数有些提速, 但是协程啥的反而性能损失了一小半 后来又试了 3.11, 比 3.8 快的确实明显, 程序启动和几个缓存的设计都挺有意思的 后来看到 taichi, 试了下, 至少我的代码没啥明显变化, 貌似还有些限制... 今天机器之心推送看到 codon, 去官网看又是 gpu 加速又是一些前提条件的, 暂时只敢观望, 也没见到有人聊聊到底咋样 后来周报里看到 socketify, 还在观望, TCP 上对 Python 来说性能一直不是问题, 协程+reuse_port 足够用了, 不知道这库有什么前景没有, 毕竟被好几个 "考试大师" 类的 web 库坑过好几次了 hpy 很早以前见到了, 一直没尝试, 有啥意思啊? 确实, 代码写到一定阶段发现, 性能真从来都不是事, 软件架构和技术选型反而是杀伤更大的坑... 早年写的代码不管维护重构多少次, 第二年看全都像屎山 |
3
superbai 2022-12-12 23:06:33 +08:00
OP 是用 Python 做什么场景的业务?感觉对性能很看重但是又用了 Python ,比较好奇
|
4
ClericPy OP @superbai
最近处理 asyncio 做流量转发调度相关,还有 TCP 日志啥的,两个都几千 qps 处理一大堆 TCP ,以前折腾 hadoop steaming 跟爬虫,那时候才真是天天被逼着砍配置... |
5
pefan 2022-12-13 01:16:16 +08:00 via iPhone
HN 上有人试用第一个,不过 import numpy 就卡住了。
|
6
lookStupiToForce 2022-12-13 11:53:48 +08:00
第一个项目自己也提到了需要大型库自身对 Codon 提供支持才行,目前来看还属于星星之火,是否能燎原依然看大型库的开发者,可以想见要轮到普通开发者使用还遥遥无期
|
7
shinession 2022-12-13 20:13:55 +08:00
看到 taichi 就不想去试了,之前就因为 pandas 没办法导入,搞了好久放弃了.这么常用的库都不支持,我都好奇到底支持什么库
|
8
ClericPy OP @pefan
@shinession @lookStupiToForce 所以这么些各种提速, 限制还是大. 目前还是针对特殊场景优化的, 想用通用型的还是走 pypy pyston 之类的方案? mypyc 看到很久了还没试不知道靠谱不靠谱 好几次想 all-in golang 但还是舍不得... |
9
Vavrines 2022-12-14 01:07:16 +08:00 1
我还以为只有我这种做科学计算的会关心性能,这里目前还是 numba 最开箱即用
codon 的集赞速度让我觉得他们可能更适合开一家公关公司... |
10
jjx 2022-12-14 10:00:46 +08:00
codon 说是 python 编译器感觉有点误导 其实就是个新语言
|
11
vicalloy 2022-12-14 16:28:15 +08:00
试着 import 了一下标准库,连 logging 都过不了。
感觉离真正的实用还有很大一段距离。 而且根据协议只是个人使用免费。 谨慎观望中。 |
12
ClericPy OP |
13
penguinWWY 2022-12-15 19:45:08 +08:00 1
看了下 Codon 的实现,目前只能算是个玩具
这个思路有点像前几年在 js 上做 Code smells and type analysis —— 只要用户写出非常易于优化的代码,我就可以优化的非常好。 |
14
learningman 2022-12-15 21:31:36 +08:00 1
codon 正在试,感觉是另外一语言,只是和 python 很像,能 interop 罢了
benchmark 都跑不通。。。 https://gist.github.com/Zxilly/b5d909d48ec283e514765afee32a3b14 |
15
penguinWWY 2022-12-16 10:45:35 +08:00
@learningman 需要环境变量 CODON_PYTHON ,用来指定 libpython
|
16
learningman 2022-12-16 20:57:17 +08:00
@penguinWWY #15 跑通了,还是慢,因为他没写浮点库还是在 python 跑的。
估计过两年再来看好点,现在还是个玩具能有 3k star 挺离谱的 |
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 试试。 |
18
ClericPy OP @NoAnyLove reuse_port 当时说的其实就是多核+协程... 没啥特殊的
nuitka 协程性能降低我也不能太确定是不是测试代码的问题, 高并发单核协程时候, 同一套代码原生 Cpython 测试好几次都比编译好的 .exe 好不少, 没具体去试, 不过纯粹的循环和函数 nuitka 里有提升, 却也没到好几倍那么明显. 三板斧还是讨论了好多年把 Python 当胶水的其他语言动态链接库 / Cython / pypy(pyston 之类的), 这么多年了最稳定的还是这几个, 好几个 Benchmark 好看的库也基本都是 Cython 或者 rust 写模块 Python 追求性能看来短期内还是没有特别大的惊喜 |