如何加速Python执行?

2024-05-21 14:41:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个用Python编写的项目,它可以处理大量的数据。 我想加快执行速度。

简单地说,假设我有一个完全优化的示例代码:

def foo(x):
   doSomething

main():
   for i in range(1,10000000):
      foo(i)

有什么办法可以加快速度吗?例如使用多处理或其他方法? 最重要的是,它值得吗?

谢谢你的回复。我想我会尝试多处理的方法。有人能给我推荐一个向导或一些帮助我的例子吗?


Tags: 数据项目方法代码in示例forfoo
3条回答

要知道的唯一真正的方法是轮廓和测量。你的代码可以做任何事情。”doSomething“可能是一个time.sleep(10),在这种情况下,分叉10000000进程将使整个程序在大约10秒内运行(忽略分叉开销和由此导致的慢行)。

使用http://docs.python.org/library/profile.html并检查瓶颈在哪里,看看是否可以使用更好的编码优化“完全优化”程序。如果已经够快了,就停下来。

然后,根据它是CPU还是I/O绑定以及您拥有的硬件,您可能需要尝试多处理或线程。如果您的问题可以被解决,您还可以尝试将其分发到多台机器上,并执行一些map/reduce之类的操作。

首先回答你的最后一个问题,如果你在表现上有问题,那么这是值得的。这是唯一的标准,真的。

至于如何:

如果您的算法速度慢是因为计算开销大,请考虑将其重写为C extension,或者使用Cython,这样可以用Python风格的语言编写快速扩展。而且,PyPy的速度越来越快,可能只需运行代码而无需修改。

如果代码在计算上不昂贵,但它只是循环大量的代码,那么可能会通过多处理来分解它,因此它可以并行完成。

最后,如果这是某种基本的数据分散任务,请考虑使用快速数据存储。所有主要的关系数据库都在wazoo中得到优化,您可能会发现,只要让数据库为您执行任务,就可以加快任务的执行速度。您甚至可以将其形状调整为适合存储大数据集的Redis存储。

您可以使用PyPy解释器,该解释器内置了JIT编译器,它实际上可以比这样的循环提高性能。这里有一个link解释了PyPy解释器比常规CPython提供的一些速度提升。

或者可以使用Cython编写代码,该代码允许在python中使用本机c扩展。大块的核弹是这样写的,以获得良好的加速。

或者你可以忘记使用python,直接用ASM编写。当然很难做到,但是当你看到你的程序比其他人快1%的时候?你会很高兴你多跑了一英里。

相关问题 更多 >