优化 python 程序?

2015-12-29 07:07:09 +08:00
 billgreen1
一个函数,要使用不同的数据(data1, data2, .....data10000,...),不涉及锁。

单个函数, func(data1),耗时不大,也就几十到 100 毫秒左右,但是要运行的次数很多。
这样的程序应该怎样优化?

我试过 multiprocessing ,但是效果不大,感觉 multiprocess 对那种单个耗时很大的程序帮助比较大。
3862 次点击
所在节点    Python
21 条回复
binux
2015-12-29 07:14:23 +08:00
用 multiprocessing 之后 CPU 占满了吗?占满了就没得提升了,如果没有,要么你的程序不是 CPU 密集型,继续加大线程 /进程数,要么你用得不对。
billgreen1
2015-12-29 07:24:52 +08:00
@binux 占满了, 55555~~~
clino
2015-12-29 07:33:27 +08:00
cython 之类的?
helloworld00
2015-12-29 07:36:33 +08:00
先 profile 看到底哪最耗时,从你这么几句看不到代码很难说出什么方法

想办法有目的性的去优化代码, 数据结构,代码逻辑等

最后用 pypy
ericls
2015-12-29 08:08:39 +08:00
CPU 密集用 pypy cython 多线程
IO 密集 用 异步

看看 GIL 也许有帮助
ljdawn
2015-12-29 08:34:28 +08:00
如果是 cpu 密集型的就没法子了...
DuckJK
2015-12-29 08:40:02 +08:00
h4x3rotab
2015-12-29 09:29:07 +08:00
mapreduce
bookocean
2015-12-29 09:32:04 +08:00
都不清楚你这个函数是干嘛的,怎么给意见呢
9hills
2015-12-29 09:46:51 +08:00
分析性能瓶颈,尝试优化,实在不行就用 C 重写相关部分

其实暴力的办法就是上多机并行处理
Feiox
2015-12-29 10:12:55 +08:00
其实。。。一个函数几十上百毫秒,已经算耗时大的了。。。。
est
2015-12-29 10:16:19 +08:00
Aalen
2015-12-29 10:34:26 +08:00
hadoop 啦~
zhicheng
2015-12-29 10:38:11 +08:00
Numpy
ProfFan
2015-12-29 11:31:45 +08:00
@est 非常感谢🙏收藏了~
pynix
2015-12-29 11:37:19 +08:00
这耗时已经很长了好吧。。。。。
ryd994
2015-12-29 11:59:03 +08:00
不要把函数直接挂给 multiprocessing
fork 的开销也不小的
正确的是写一个 wrapper ,让一个进程处理几十个
m8syYID5eaas8hF7
2015-12-29 13:43:53 +08:00
用 C++写一下那个函数试试看(来自 python 初学者的建议)
ethego
2015-12-29 14:17:28 +08:00
为什么要开进程?这明显只要开线程就够了
glogo
2015-12-29 19:50:58 +08:00
multiprocessing + 协成,我是这样的, IO 密集型,性能是 multiprocessing + 线程的 5 倍

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

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

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

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

© 2021 V2EX