如何加快Python执行速度?
我有一个用Python写的项目,它处理的数据量很大。
我想加快执行的速度。
简单来说,假设我有这段已经完全优化的代码:
def foo(x):
doSomething
main():
for i in range(1,10000000):
foo(i)
有没有什么方法可以让它更快呢?比如说使用多进程或者其他的方式?
最重要的是,这样做值得吗?
谢谢大家的回复。我想我会尝试多进程的方式。有人能推荐我一些指南或者示例来帮助我吗?
5 个回答
要真正知道代码的表现,最好的办法就是进行性能分析和测量。你的代码可能在做任何事情。比如“doSomething”可能是一个 time.sleep(10)
,那么如果你启动 10000000
个进程,整个程序大概会在10秒内完成(这里不考虑启动进程的额外开销和可能导致的慢速度)。
可以使用 http://docs.python.org/library/profile.html 来检查代码的瓶颈,看看是否能通过更好的编码来优化这个“已经优化过的”程序。如果它已经足够快,那就可以停止了。
接下来,根据你的程序是更依赖CPU还是I/O,以及你拥有的硬件,你可能会考虑使用多进程或多线程。如果你的问题可以拆分开来,你还可以尝试将任务分配到多台机器上,做一些类似于map/reduce的处理。
先回答你最后一个问题,如果你遇到性能问题,那就值得去解决。这其实是唯一的标准。
至于怎么做:
如果你的算法运行得很慢,是因为计算量太大,可以考虑把它改写成一个C扩展,或者使用Cython,这样你就可以用一种类似Python的语言来写快速的扩展。另外,PyPy的速度也越来越快,可能可以直接运行你的代码而不需要修改。
如果代码不是因为计算量大而慢,而是因为循环次数太多,可以考虑使用多进程,这样可以并行处理,加快速度。
最后,如果这是某种基本的数据处理任务,可以考虑使用快速的数据存储。所有主要的关系型数据库都经过了很多优化,你可能会发现,只要让数据库来处理这些任务,就能大大加快速度。你甚至可以把数据调整成适合Redis存储的格式,这样可以非常有效地处理大数据集。