【问题标题】:Django filtering odd behavior with for loopDjango用for循环过滤奇怪的行为
【发布时间】:2020-06-25 03:42:31
【问题描述】:

我正在尝试在 Django 中执行一些过滤,并尝试测试使用不同的后端结构需要多长时间。过滤正在工作,但是,当我尝试通过运行它 n(设置为 1000)次,然后将总时间除以 n 来获得过滤所花费的平均时间时,它大约快 10 倍,然后当 n 是设置为 1。这有什么原因吗? (我乘以 1000 转换为 ms)

没有平均值:

    temp = Response.objects.filter(id="Asde22dFee")[0].content
    end = time.time()
    return HttpResponse((end-start)*1000)

平均:

    
    start = time.time()
    for i in range(1000):
        temp = Response.objects.filter(id="Asde22dFee")[0].content
    end = time.time()
    return HttpResponse((end-start)*1000 / 1000)

【问题讨论】:

  • 乘除以1000?那只是一个。由于只有两个值(开始和结束),要找出平均值,无论n 是什么,都需要除以 2。
  • 嗯,这是有道理的,但是我试图找到计算“temp”变量的平均时间......所以需要除以计算的次数......
  • 其次,平均值不是通过减法计算的。

标签: django django-models


【解决方案1】:

你以错误的方式计算平均值。

求平均值的公式是这样的:

1 + 2 + 3 + ... + n
___________________
        n

现在,如果您想找到执行n-查询次数的平均时间,您必须测量每个查询所花费的实际时间(即end - start),然后添加所有 除以n:

times = [] # list for holding all the times

n = 1000

for i in range(n):
    start = time.time() # start time for query
    temp = Response.objects.filter(id="Asde22dFee")[0].content
    end = time.time() # end time for query

    time_taken = end - start # time taken by the query
    # put this into the times list
    times.append(time_taken)

return HttpResponse(sum(times) * 1000 / n)

【讨论】:

    猜你喜欢
    • 2012-12-10
    • 2019-02-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-15
    相关资源
    最近更新 更多