Эффективно выделить много объектов Python
Я работаю над программой на 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% времени, и я оптимизирую ее отдельно.
1 ответ
Если объект начинается с пустого вызова конструктора, не могли бы вы вытащить его, если цикл? Затем copy.deepcopy ваш начальный объект?