Django 1.6,干草堆 : How to print the search's time?

标签 django

我正在将 Django 与 haystack 结合使用,我想知道是否可以打印搜索显示结果所需的时间。例如: 每次查询后我想打印:x results in y秒

这真的可以用 haystack 实现吗?预先感谢您!

最佳答案

Haystack 默认将搜索函数包装在一个包装器中,该包装器对搜索进行计时并输出(请参阅 source code )。但是,只有当DEBUGTrue时,它才会输出信息。

您可以做的是指定一个类似的包装器来输出时间并将其动态添加到搜索后端。请注意,您需要包装您正在使用的特定后端的方法。例如。如果您使用 ElasticSearch:

from time import time
from haystack.backends.elasticsearch_backend import ElasticsearchSearchBackend

def time_wrapper(func):
  def wrapper(*args, **kwargs):
    start = time()
    try:
      return func(*args, **kwargs)
    finally:
      stop = time()

      # time = stop - start, now output it wherever you want. 
      print '%.3f' % (stop - start)
  return wrapper

ElasticsearchSearchBackend.search = time_wrapper(ElasticsearchSearchBackend.search)

您可以在更高级别上对搜索进行计时,包括构建查询所需的时间等,但请记住 SearchQuerySet 是惰性的。您需要计算查询集的第一次评估的时间,而不是构建的时间。

如果您想向用户显示所花费的时间,请考虑对实际 View 函数(的一部分)进行计时,并将其传递到模板上下文。

关于Django 1.6,干草堆 : How to print the search's time?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22239439/

相关文章:

python - Djangorest框架 : is it possible to deserialize only specific fields of incoming JSON?

python PIL - 背景显示不透明而不是透明

django - 如何在 Django 中为同一参数处理具有多个变量的 request.GET

python - 带有 Django 和 MongoEngine 的 Python 中的 Unicode

python - 跳过 html5lib 中视频的清理

python - 使用 django_facebook 和 django-celery 时 Facebook 用户的点赞存储在哪里?

html - 当我扩展 base.html/for django 时,是否可以排除 base.html 中包含的 footer.html

python - django - 如果提交的表单值为 X,则阻止表单提交

python - Django : authenticate() is not working for users created by register page, 但适用于由管理员创建的用户

css - django 1.8 管理站点 css 问题,而 css 文件加载正常