Я пытаюсь настроить приложение, которое страдает в отделе скорости.Из-за этого я начал преобразовывать все операторы цикла for в возможные списки, когда это возможно.
В настоящее время я работаю над функцией, которая должна перебирать словарь наборов запросов Django.Старый код использует оператор for-loop для итерации, и он работает нормально.Мой код, использующий понимание списка, возвращает наборы запросов django вместо объекта моей модели.
Вот код:
def get_children(parent):
# The following works
children = []
for value in get_data_map(parent).itervalues():
children += list(value)
# This part doesn't work as intended.
booms = [value for value in get_data_map(parent).itervalues() if value]
import pdb
pdb.set_trace()
(Pdb) type(children[0])
<class 'site.myapp.models.Children'>
(Pdb) type(booms[0])
<class 'django.db.models.query.QuerySet'>
Обратите внимание, что get_data_map возвращает словарь со значениями <class 'django.db.models.query.QuerySet'>
Эта часть кода является одной из самых трудоемких частей приложения.Если я получу эту работу над списком, можно надеяться, что скорость приложения вырастет в два раза.
Есть идеи, как мне ускорить эту часть кода?