我需要加快功能.我应该使用cython,ctypes还是其他什么?

Pet*_*art 7 python ctypes cython

通过编写基因编程类型的应用程序,我学习Python很有趣.

我在本网站上得到了Torsten Marek,Paul Hankin和Alex Martelli的一些很好的建议.

该计划有4个主要功能:

  • 生成(随机)表达式树.
  • 评估树的适应性
  • 杂交
  • 变异

因为所有生成,杂交和变异调用'评估适应性'.它是最繁忙的功能,是速度上的主要瓶颈.

由于遗传算法的本质,它必须搜索一个巨大的解决方案空间,因此越快越好.我想加快这些功能.我将从健身评估员开始.我的问题是最好的方法是什么.我一直在研究cython,ctypes和'链接和嵌入'.他们对我来说都是新手,现在已经超出了我的范围,但我期待着学习一个,最终学习所有这些.

'适应度函数'需要将表达式树的值与目标表达式的值进行比较.因此它将包含一个后缀评估器,它将以后缀顺序读取树.我有python中的所有代码.

我需要建议我现在应该学习和使用:cython,ctypes或链接和嵌入.

谢谢.

Lie*_*yan 15

暂时忽略所有人的回答.您应该学习使用的第一件事是分析器.Python附带一个profile/cProfile; 您应该学习如何阅读结果并分析真正的瓶颈所在.优化的目标有三个:减少每次调用所花费的时间,减少调用次数,减少内存使用以减少磁盘抖动.

第一个目标相对容易.分析器将向您显示最耗时的功能,您可以直接使用该功能进行优化.

第二个和第三个目标更难,因为这意味着您需要更改算法以减少进行如此多调用的需要.找到具有大量调用的函数,并尝试找到减少调用它们的方法.利用内置的集合,它们得到了很好的优化.

如果你已经完成了上述所有操作并且仍然存在性能问题并且你在x86平台上(基本上是大多数CPU),那么就开始关注Psyco.Psyco可以根据需要更改python代码来优化Python代码.

如果你正在进行大量的数字和数组处理,你应该看看Numpy/Scipy和gmpy第三方模块.

接下来尝试的是Cython.Cython是一种与Python略有不同的语言,实际上Cython实际上是C语言的Python语言.

对于非常紧凑的循环中的部分代码,您无法再使用任何其他方式进行优化,您可能希望将其重写为C扩展.Python对C语言的扩展有很好的支持.

  • 当你使用python的profile或cProfile时,我发现一件非常方便和有用的东西是一个可视化的工具,让我看到图中的数字.我最喜欢的是RunSnakeRun.它需要wxPython和其他一些依赖项.在cProfile输出上运行它会产生一个GUI squaremap-thingy,其中每个函数都被绘制为一个矩形,由该函数内的(平均或累积)时间大小,并包含它调用的函数的rects.使理解分析器输出变得轻而易举. (3认同)