AspectC ++ - это то, что вам нужно. Я сам не использовал его, но парадигма аспектно-ориентированного программирования пытается решить именно эту проблему.
особенно если вы выполняете обработку на основе набора записей - базы данных съедают такую обработку с завтрака. В Django вы можете отправлять RAW SQL в базу данных: http://docs.djangoproject.com/en/dev/topics/db/sql/#topics-db-sqlЯ надеюсь, что это, по крайней мере, может указать в правильном направлении ...
"tokenize.py выходит на первое место, что может иметь некоторый смысл, поскольку я много форматирую числа."
Не имеет никакого смысла.
См. http://docs.python.org/library/tokenize.html .
Модуль tokenize предоставляет лексический сканер исходного кода Python, реализовано в Python
Tokenize, выходящий на первое место, означает, что у вас идет динамический синтаксический анализ кода.
AFAIK (выполнение поиска в репозитории Django) Django не использует tokenize. Таким образом, ваша программа выполняет какое-то динамическое создание экземпляра кода. Или вы профилируете только первый раз, когда ваша программа загружается, анализируется и запускается, что приводит к ложным предположениям о том, где идет время.
Вы не должны никогда делать расчет в тегах шаблонов - медленно. Он включает в себя сложную мета-оценку тега шаблона. Все вычисления в представлении следует выполнять на простом языке Python с небольшими накладными расходами. Используйте шаблоны только для презентации.
Кроме того, если вы постоянно выполняете запросы, фильтры, суммы и т. Д., У вас есть хранилище данных. Получите книгу по проектированию хранилищ данных, и следуйте шаблонам проектирования хранилищ данных.
У вас должна быть центральная таблица фактов, окруженная таблицами измерений. Это очень и очень эффективно.
Суммы, группировки и т. Д. Могут быть выполнены как операции defaultdict
в Python. Произвести массовую выборку всех строк, построив словарь с желаемыми результатами. Если это слишком медленно, тогда вам придется использовать методы хранилища данных для сохранения постоянных сумм и групп отдельно от ваших подробных фактов. Часто это включает выход за пределы Django ORM и использование функций СУБД, таких как представления или таблицы производных данных.
При работе с большими наборами данных вы также можете сэкономить много ресурсов процессора и памяти, используя ValuesQuerySet , который обеспечивает более прямой доступ к результатам запроса вместо создания модели. экземпляр объекта для каждой строки результата.
Его использование выглядит примерно так:
Blog.objects.order_by('id').values()
В таком сценарии база данных часто является узким местом. Кроме того, использование ORM может привести к неоптимальным SQL-запросам.
Как отмечали некоторые, невозможно определить, что на самом деле представляет собой проблема, только с помощью предоставленной вами информации.
Я просто могу дать вам несколько общих советов. :
PS : Просто к сведению, однажды у меня было довольно простое представление, которое было очень медленным. После установки ПО промежуточного слоя отладки нижнего колонтитула я увидел это около 500! sql-запросы выполнялись в этом единственном представлении. Простое использование select_related () уменьшило количество запросов до 5, и просмотр выполнялся, как ожидалось.
После установки ПО промежуточного слоя отладки нижнего колонтитула я увидел это около 500! sql-запросы выполнялись в этом единственном представлении. Простое использование select_related () уменьшило количество запросов до 5, и просмотр выполнялся, как ожидалось. После установки ПО промежуточного слоя отладки нижнего колонтитула я увидел это около 500! sql-запросы выполнялись в этом единственном представлении. Простое использование select_related () уменьшило количество запросов до 5, и просмотр выполнялся, как ожидалось.