12

我一直使用 Python 的timeit库来为我的小 Python 程序计时。现在我正在开发一个 Django 应用程序,我想知道如何计时我的 Django 函数,尤其是查询。

例如,我的def index(request)views.py 中有一个在我加载索引页面时会做很多事情的文件。如何timeit在不改变太多现有功能的情况下使用此特定功能计时?

4

4 回答 4

28

如果您的 django 项目处于调试状态,您可以使用以下命令查看数据库查询(和时间):

>>> from django.db import connection
>>> connection.queries

我知道这不能满足您对功能分析的需求,但希望它对查询部分有所帮助!

于 2010-12-09T17:32:19.927 回答
6

调试工具栏是您想要的,它可以帮助您为每个查询计时。

或者,这个片段也可以。

http://djangosnippets.org/snippets/93/

于 2010-12-09T17:32:34.430 回答
5

您可以获得的最佳方法是使用Debug Toolbar,您还将获得一些额外的查询优化功能,这将帮助您优化您的数据库查询。

这是另一种解决方案,您可以使用connection.queries. 这将返回为在命令之前执行的命令执行的 SQLconnect.queries命令。您可以在获取上一个查询的时间后使用 reset_queries reset_queries()。使用reset_queries()不是强制性的。

假设您有一个名为Device的模型。您可以像这样测量查询时间:

>>> from django.db import connection, reset_queries
>>> from appname.models import Device
>>> devices = Device.objects.all()
>>> connection.queries
>>> reset_queries()
于 2019-10-21T09:17:11.277 回答
0

任何绊倒此结帐哨兵方法的人。

https://github.com/getsentry/sentry-python/blob/master/sentry_sdk/integrations/django/__init__.py#L476

您可以用您自己的函数替换executeexecutemany使用您自己的函数来跟踪执行返回所需的时间。

一种简单的方法是创建自定义上下文管理器,该管理器启动一个计时器,并在退出时将计时器的最终值写入您传递给它的数组。

然后你可以检查数组。

于 2021-08-23T03:29:14.467 回答