我们有一些用python编写的代码,它们使用一些实际上只是“结构”的类——这些类的实例中只有一堆字段,而没有方法。示例:
class ResProperties:
def __init__(self):
self.endDayUtilities = 0
self.marginalUtilities = []
self.held = 0
self.idleResource = True
self.experience = 0.0
self.resSetAside = 0
self.unitsGatheredToday = 0
我们的主代码使用这个类的一组实例。在
为了加快代码的速度,我想我应该把这个类循环化:
^{pr2}$然而,结果是代码现在运行速度慢了25%!在
我如何找出导致代码运行速度变慢的原因?在
谢谢。在
您将这些类转换为Cython,但仍在使用Python代码中的类?在
从C到Python再从C到Python的转换将产生开销。例如,您的
endDayUtilities
成员是一个C样式的浮点。从Python访问它时,必须先构造一个float()
对象,然后Python代码才能对其进行任何操作。当您从Python中为该属性赋值时,同样的情况也会反过来发生。在在我的脑子里,我会估计这些数据转换的性能开销。。。哦,大约25%。:-)
除非将一些使用这些数据的代码移动到Cython,否则性能不会得到提升。基本上,你在C-land呆得越多,你就会做得越好。反反复复会害死你的。在
作为另一种更简单的方法,您可能希望尝试Psyco或PyPy而不是Cython。在
相关问题 更多 >
编程相关推荐