Большая часть времени тратится на код следующего типа: р>
Код: Выделить всё
def method(self):
for r in range(self.depth):
for s in self.very_large_precomputed_list_of_lists[r]:
for t in self.scalars:
...
method_2(r, s, t, ...)
Прежде чем кто-нибудь скажет, мне, по сути, придется использовать Python для этого проекта. И все знают, что «питон медленный». Здесь «медленно» означает, что выполнение может занять 20 минут. Но люди, которые знают, что делают, по-прежнему преуспевают в Python, и я потратил немного времени на поиск в Google простых изменений кода Python, которые можно внести, чтобы повысить производительность.
Один бросилось в глаза: в нескольких местах, напр. здесь предполагается, что максимальное использование переменных локальной области может привести к весьма значительному повышению производительности. Таким образом, искусственное принудительное использование часто используемых переменных может повысить производительность.
Мой вопрос: существуют ли общие правила или хорошие места, где можно почитать о технических деталях, которые помогут мне понять, когда это можно правильно применить, а когда это просто глупо?
Почему я говорю «глупый»? Я отнесся к этому совету серьезно, и теперь мой код выглядит так:
Код: Выделить всё
for r in range(self.depth):
cached_var_1 = self.var_1[r]
cached_var_2 = self.var_2[r].items()
cached_var_3 = self.special_func
cached_var_4 = tuple
cached_var_5 = range
cached_var_6 = self.very_large_precomputed_list_of_lists[r]
...
for s in cached_var_6:
for t in self.scalars:
... (many more for loops)
# the main code which now references the 'cached' or localised variables
# rather than their global names
Я провожу тестирование производительности, но попутно провожу множество других оптимизаций, поэтому трудно понять, насколько полезна эта практика «локализации». Возможно, мне просто нужно делать это «больше», прежде чем я замечу разницу. Есть совет?
Подробнее здесь: https://stackoverflow.com/questions/790 ... erformance