【发布时间】:2012-05-23 23:24:51
【问题描述】:
我们有一些用 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%!
我如何找出导致代码现在运行速度变慢的原因?
谢谢。
【问题讨论】:
-
“代码”运行速度慢了 25%?什么代码?
-
你如何衡量这种放缓?
-
如果类只是属性的容器,为什么不使用命名元组呢?
-
代码是一个更大的模拟的一部分——社团项目——code.google.com/p/societies。我有一个标准配置,在我的机器上运行大约需要 58 秒。随着变化,它上升到大约 80 秒。
标签: python optimization cython