Python 如何最小化循环的执行时间?
我首先创建了一个包含以下内容的词典列表:Python 如何最小化循环的执行时间?,python,django,Python,Django,我首先创建了一个包含以下内容的词典列表: navs = [{'dim': object_1, 'values': [list_of_objects_relates_to_Obj1]}] 我有一个这样的入门模型: class Entry(models.Model): resp_id = models.ForeignKey('Responsibilities') resp_value = models.ForeignKey('JlmValues') 而不是计算导航列表中每个对象的
navs = [{'dim': object_1, 'values': [list_of_objects_relates_to_Obj1]}]
我有一个这样的入门模型:
class Entry(models.Model):
resp_id = models.ForeignKey('Responsibilities')
resp_value = models.ForeignKey('JlmValues')
而不是计算导航列表中每个对象的相关元素的循环:
for i in navs:
for j in i['values']:
total = 0
list_retrieved = Entry.filter(Q(resp_value__value_path = j.value_id) | Q(resp_value__value_path__endswith= '.' + j.value_id) | Q(resp_value__value_path__contains= '.' + j.value_id + '.') | Q(resp_value__value_path__startswith= j.value_id + '.')).values_list('resp_id__mgtper_id').distinct()
s = datetime.now()
total += len(Responsibilities.filter(mgtper_id_id__in=list_retrieved))
counter.append({'type':'value','value':j.value_name, 'total':total})
e = datetime.now()
print "Execution time of calculating total : "+str(e - s)
每个元素的平均时间:
Execution time of calculating total : 0:00:00.928000
我在navs中有6个字典,一个字典中的一些对象有300多个相关对象。有什么方法可以减少执行时间吗?这里有一种方法可以改进它。如果您没有在其他地方使用此查询的结果:
total+=len(responsibility.filter(mgtper\u id\u id\u in=list\u retrieved))
使用.count()
方法比使用len
更有效。例如:
total+=responsibility.filter(mgtper\u id\u id\u in=list\u retrieved)。count()
这样,它们的计算将在数据库上执行,而不是在Django实例上执行。几乎与计算总计的执行时间相同:0:00:00.913000然后我将尝试优化数据库(添加索引,查看带有子查询的手动选择是否可以加快速度,等等),正如你所说的那样,你在Django做了正确的事情。