gpt4 book ai didi

python - 如何弄清楚为什么 cython-izing 代码会减慢它的速度?

转载 作者:行者123 更新时间:2023-11-28 22:02:46 25 4
gpt4 key购买 nike

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

我们的主要代码使用了这个类的一堆实例。

为了加快代码速度,我想我应该用 cython 化这个类:

cdef class ResProperties:

cdef public float endDayUtilities
cdef public list marginalUtilities
cdef public int held
cdef public int idleResource
cdef public float experience
cdef public int resSetAside
cdef public int unitsGatheredToday

def __init__(self):
self.endDayUtilities = 0
# etc: code just like above.

但是,结果是代码现在运行速度慢了大约 25%!

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

谢谢。

最佳答案

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

数据从 C 到 Python 的转换会产生开销。例如,您的 endDayUtilities 成员是 C 风格的 float 。当您从 Python 访问它时,必须先构造一个 float() 对象,然后您的 Python 代码才能对其执行任何操作。当您从 Python 分配给该属性时,同样的事情必须以相反的方式发生。

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

在将使用该数据的部分代码 移至 Cython 之前,您不会看到性能提升。基本上,你在 C 地停留的时间越长,你就会做得越好。来回会杀了你。

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

关于python - 如何弄清楚为什么 cython-izing 代码会减慢它的速度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10711266/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com