gpt4 book ai didi

django - 在 Django 中间件中测量 View 执行时间 - 好主意吗?

转载 作者:行者123 更新时间:2023-12-04 11:59:29 27 4
gpt4 key购买 nike

我想检查我网站中 View 的执行时间。这可以由装饰器完成,但由于我有几十个 View ,我想在中间件中进行,将请求作为键的初始时间保存在字典中(见下文),但我担心我所做的假设(见下文):

class SlowWarningMiddleware:

def __init__(self):
self.time_tracking = {}

def process_view(self, request, view_func, view_args, view_kwargs):
self.time_tracking[request] = time.time()

def process_response(self, request, response):
if request not in self.time_tracking:
return response
delta = time.time() - self.time_tracking[request]

def process_exception(self, request, exception):
if request not in self.time_tracking:
return
delta = time.time() - self.time_tracking[request]

这段代码假设了两点:
  • 同一个中间件实例处理预览和后 View 逻辑。
  • 请求实例保持相同的实例预览和后 View 。

  • 这些假设安全吗?
    这个中间件是个好主意吗?

    最佳答案

    阅读 Is Django middleware thread safe?给了我一个更好的主意:
    向请求对象添加一个属性(即request.start_time = time.time() 在 View 执行之前)。

    这避免了假设 1 并消除了在字典中收集永远不会被清除的“僵尸”项目的危险潜力。

    这也在一定程度上减少了假设 2,因为如果在某个时候创建​​了新的请求副本,如果复制了属性(如在 python 复制模块中所做的那样),它仍然可以工作。

    甚至作为奖励,它的代码更少,更不容易出错并且更具可读性:)

    关于django - 在 Django 中间件中测量 View 执行时间 - 好主意吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6401987/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com