如何找出为什么cythonizing代码会减慢速度?

2024-09-29 17:09:57 发布

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

我们有一些用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%!在

我如何找出导致代码运行速度变慢的原因?在

谢谢。在


Tags: 实例方法代码self示例initdef结构
1条回答
网友
1楼 · 发布于 2024-09-29 17:09:57

您将这些类转换为Cython,但仍在使用Python代码中的类?在

从C到Python再从C到Python的转换将产生开销。例如,您的endDayUtilities成员是一个C样式的浮点。从Python访问它时,必须先构造一个float()对象,然后Python代码才能对其进行任何操作。当您从Python中为该属性赋值时,同样的情况也会反过来发生。在

在我的脑子里,我会估计这些数据转换的性能开销。。。哦,大约25%。:-)

除非将一些使用这些数据的代码移动到Cython,否则性能不会得到提升。基本上,你在C-land呆得越多,你就会做得越好。反反复复会害死你的。在

作为另一种更简单的方法,您可能希望尝试Psyco或PyPy而不是Cython。在

相关问题 更多 >

    热门问题