我正在开发一个 Python 程序,有一个内部循环导致性能问题。我在上面运行了一个分析器,我发现 50% 的时间花在了对象分配上。基本上是这样的:
result_list = []
for i in range(BIG_NUMBER):
obj = MyClass()
# do stuff with obj...
result_list.append(obj)
obj = MyClass() 行占用了 50% 的时间。有什么方法可以在 Python 中有效地分配大量这些对象吗?也许是某种批量分配?
无需复制/粘贴整个MyClass,它具有以下特点:
- 它是一个 ORM 对象,所以它基本上将属性映射到数据库值
- 它有很多属性函数、元类等,所以它是一个非常“胖”的类
# do stuff with obj... 行主要设置各种属性,通常通过 setattr,但在少数情况下通过自定义函数。所以如果有 10 个属性要设置,9 个通常是通过 setattr,1 个可能是通过一个特殊函数。这部分占用了大约 40% 的时间,我正在单独对其进行优化。
请您参考如下方法:
如果对象以一个空的构造函数调用开始,你能不能在循环中不把它拉出来?然后copy.deepcopy你的种子对象?
