python 程序加速

2015-01-12 13:46:53 +08:00
 zerh925

公司现在在用python做自动化开发,原型已开发完毕,现在就是提速,之前开发的时候完全不考虑时间成本,达到目的优先,现在就是要把2分钟的程序压缩到5秒以内。想请问下大家有哪些可行的手段?我能想到的multiprocess,Cython和SWIG用C来写模块。

4795 次点击
所在节点    Python
35 条回复
loading
2015-01-12 14:01:02 +08:00
用go重构。
geeklian
2015-01-12 14:13:03 +08:00
2分钟压缩到5秒...
虽然大家都知道python比C慢,但还没到这地步吧。
cevincheung
2015-01-12 14:15:00 +08:00
为什么我想说“多机并行计算”呢……
min
2015-01-12 14:16:42 +08:00
优化的第一步永远是先profiling
yakczh
2015-01-12 14:16:46 +08:00
pypy

Python 2.7.3 (f66246c46ca30b26a5c73e4cc95dd6235c966b8f, Jul 30 2013, 09:27:06)
[PyPy 2.0.2 with GCC 4.4.7 20120313 (Red Hat 4.4.7-3)] on linux2
zerh925
2015-01-12 14:17:10 +08:00
@geeklian 因为程序中间最耗时间的部分可以并行的
zerh925
2015-01-12 14:17:35 +08:00
@yakczh 谢谢 我去google一下
zerh925
2015-01-12 14:18:53 +08:00
thx. will do.
zerh925
2015-01-12 14:19:15 +08:00
@loading 不是很明白 改用go语言吗?为什么
shiny
2015-01-12 14:22:16 +08:00
先分析瓶颈
messense
2015-01-12 14:34:48 +08:00
性能瓶颈如果是 CPU 计算密集型的试试 multiprocessing,network IO 密集型的多线程也能有一定程度的提升。
zerh925
2015-01-12 14:37:57 +08:00
@messense 非常感谢。正是计算密集型的。
tabris17
2015-01-12 14:39:45 +08:00
想要速度当初就不要选python吗,试试pypy,不行就拉倒吧
zerh925
2015-01-12 14:41:10 +08:00
@tabris17 老板是偏执狂。
skybr
2015-01-12 14:47:07 +08:00
Cython就可以了。

把几个数值类型的PyObject声明成C类型的, 套在with nogil里。

外面用线程池就好了。
skybr
2015-01-12 14:48:52 +08:00
涉及到动态链接库, 比如标准库的IO和一些C扩展, PyPy可能反而比CPython慢。
dreampuf
2015-01-12 14:50:02 +08:00
两个思路都是对的,并行利用多核以及用更快的底层。

并行方面看看是IO还是CPU,IO的话用gevent试试,耗时不大,CPU的话有一些计算框架,但都需要时间去采坑,而且不一定都合适。用原始的multiprocess的话,主要问题是数据交互方面非常原始,得
踩很多坑。
更换底层可以试试Cython,在不调用其他类库的纯计算可以做到两个量级的优化。或者用PyPy,Pyston。

Python平台资源丰富,没有什么过不去的坎,动不动嚷嚷换一门语言,似乎是那门语言小白特有的情怀。
clino
2015-01-12 14:50:58 +08:00
建议用 cython 试试
zerh925
2015-01-12 15:00:17 +08:00
@dreampuf 感谢
zerh925
2015-01-12 15:00:45 +08:00
@skybr 谢谢建议

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

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

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

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

© 2021 V2EX