wcsjtu 最近的时间轴更新
wcsjtu

wcsjtu

V2EX 第 254827 号会员,加入于 2017-09-17 16:25:07 +08:00
wcsjtu 最近回复了
5 天前
回复了 hhhhhh123 创建的主题 程序员 Python 读取 500M .pkl 文件,却用了 8 G 内存
getsizeof 不会递归统计内存,你得到的只是最外层容器的内存占用值。自己写个函数去递归统计吧,这样的数据才是相对准确的
5 天前
回复了 a784066538 创建的主题 Python Python 多层 for 循环性能如何提高
@xsourse 这种情况,numba 没用的,绝对是负优化。
6 天前
回复了 a784066538 创建的主题 Python Python 多层 for 循环性能如何提高
思路一:修改逻辑, 不要用 for 循环
思路二:实在要用 for ,改成 C/C++循环, 可以使用 mypyc 编译该部分代码, 也可以用 cython 编译。mypyc 有语法要求, 性能稍微好一点。cython 可以直接编,性能比较差,但是还是远比 Python for 循环好

我们团队搞了一个专门为 Python 业务逻辑加速的编译器,性能吊打 cython/mypyc/pypy , 可惜不能开源.......
12 天前
回复了 jeeyong 创建的主题 Python 如何提高 Python 数组操作性能.
应该是代码里出现了大量的 for 循环,以及大量的__getitem__/__setitem__操作才慢的。numpy.ndarray 的随机读取性能确实不如 builtins.list 。因为`ndarray[i]` 需要 new 一个 PyLongObject 出来,而`builtins.list[i]`只需要 refcnt++。

楼主这个问题, 如果用 numpy 的话, 就得摆脱面向过程的思想, 用函数式来做。numpy 的 broadcast 机制应该能实现楼主想要的功能。需要稍微学习一下。

如果不想用 numpy 的话, 只能用预编译或者 jit 方案来加速了。 既然楼主已经试过 numba 了, 我推荐另一个工具 pythran. 性能与 numba 差不多, 但是比 numba 好用
@ipwx 这个是可以做的。 就是麻烦点。 其实有点像 msgpack 这种, 只不过它没办法索引。 需要自己改造, 在 msgpack 中加上地址的元信息, 给索引用。 最好是 str/int/... 这些类型都按照 Python 的格式存储, 只是不要 PyObjectHeader 。这样读表时, 就只需要新建 header ,然后再引用表中的数据即可。 原理就是这样, 但是很麻烦,不想自己搞
@neoblackcap capnproto 好像是个序列化的库,dict 被序列化后怎么索引呢?

这个事情如果要自己造轮子吧, 肯定要自己设计 str/int/float/list/dict 这些数据结构的, 然后还要定义他们转成 PyObject*的规则,很麻烦……

所以我想问问大家有没有现成的轮子可以用用
@mayli 嗯, 这个就是我必须要求连续内存的原因了。 词表本身只读, 但是有可能词表中的元素与某个对象在同一个 page 上, 如果这个对象被改了, 那么词表中的元素也会被 copy 。
@ipwx
@air8712
@zhoujinjing09
嗯, 目前把 IPC 作为最后兜底方案……
@SenLief 应该不能,PyMalloc 是调用的 glibc 的 malloc 。应该要用 C++的轮子
@gengchun 嗯, 性能是一方面, 其实我们业务里还有很多这种词表, 有的结构比较复杂, 所以存 redis 不太合适。
关于   ·   帮助文档   ·   API   ·   FAQ   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   2153 人在线   最高记录 5497   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 40ms · UTC 12:15 · PVG 20:15 · LAX 05:15 · JFK 08:15
Developed with CodeLauncher
♥ Do have faith in what you're doing.