如何计算Django Python中的响应时间

时间:2017-12-22 07:37:17

标签: python django

我是Django Python的新手。请告知如何计算从用户输入搜索条件到将相关信息加载/显示到门户网站之前的响应时间。感谢。

4 个答案:

答案 0 :(得分:5)

Django是后端操作的python框架。它的目的是处理http请求,因此您的问题“从用户输入搜索条件到加载/显示相关信息的那一刻”在这种情况下非常模糊。您的问题表明您正在查看一些基于Javascript / Ajax的交互式前端?

如果您对单个http请求的渲染时间感到好奇,可以使用自定义中间件来解决这个问题:

class StatsMiddleware(object):
    def process_request(self, request):
        "Start time at request coming in"
        request.start_time = time.time()

    def process_response(self, request, response):
        "End of request, take time"
        total = time.time() - request.start_time

        # Add the header.
        response["X-total-time"] = int(total * 1000)
        return response

然后,在相应的Django settings.py部分中添加此中间件:

MIDDLEWARE_CLASSES = (
  ...
  'app.stats.StatsMiddleware',
  ...
)

生成响应所花费的时间将添加到自定义http标头“X-total-time”中。请注意,这将涉及所有渲染,计算,第三方系统和数据库操作。

答案 1 :(得分:4)

自Django 1.10起,此功能现在有所不同。

https://docs.djangoproject.com/en/3.0/topics/http/middleware/

新样式如下:

import time


class StatsMiddleware:
    def __init__(self, get_response):
        self.get_response = get_response

    def __call__(self, request):
        start_time = time.time()

        response = self.get_response(request)

        duration = time.time() - start_time

        # Add the header. Or do other things, my use case is to send a monitoring metric
        response["X-Page-Generation-Duration-ms"] = int(duration * 1000)
        return response

无需将开始时间存储在请求对象上并进行检索,因为它们都以相同的方法发生。

也可以用简单的函数样式代替类:

import time


def stats_middleware(get_response):

    def middleware(request):
        start_time = time.time()

        response = get_response(request)

        duration = time.time() - start_time

        response["X-Page-Generation-Duration-ms"] = int(duration * 1000)
        return response

    return middleware

答案 2 :(得分:2)

这是完成整个事情的课程

import time


class StatsMiddleware(object):

    def process_request(self, request):
        "Store the start time when the request comes in."
        request.start_time = time.time()

    def process_response(self, request, response):
        "Calculate and output the page generation duration"
        # Get the start time from the request and calculate how long
        # the response took.
        duration = time.time() - request.start_time

        # Add the header.
        response["X-Page-Generation-Duration-ms"] = int(duration * 1000)
        return response

这就是它的全部。只需存储请求进入的时间,然后再检索。

要安装上面的中间件,只需将其添加到settings.py:

即可
MIDDLEWARE_CLASSES = (
    'project.stats_middleware.StatsMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    ...
)

答案 3 :(得分:-1)

您可以在互联网浏览器中看到它(F12),或者如果您使用POSTMAN,它会显示时间。 您也可以使用标准的python库time来测量一段代码的执行时间。