【问题标题】:Persistent Connections in Django?Django中的持久连接?
【发布时间】:2021-01-26 17:45:07
【问题描述】:

我试图了解持久连接如何提高性能,尤其是在我的应用程序读取量很大的情况下。所以,我有 100000 行的记录,并且我已经索引了用户名字段。所以,我创建了一个端点,我可以在其中使用用户名进行查询,它给了我温度。这仅用于测试目的。因此,我编写了另一个脚本,该脚本具有创建一个运行 1000 次的循环并向端点发出请求的函数。我正在记录请求-响应时间并将其保存在列表中,然后计算完成 1000 个请求所需的总时间。首先,我尝试使用没有持久连接的默认 Django 数据库设置,每次我对时间进行基准测试,它记录了所有 1000 个请求的大约 43 秒。接下来,我添加了 CONN_MAX_AGE=60 并多次运行脚本,发现时间每次都增加到 103 秒。现在,如果我没记错的话,持久连接应该减少了总时间,但由于某种原因,它比每次请求响应完成时打开和关闭的正常连接要高得多。我的问题是为什么会这样? 脚本.py

import requests
import random
import time
def make_request():
    username = ['00b076300079144ca0667c341aeac046','remy','surajit','remy11']
    t = []

    for i in range(1000):

        response = requests.get('http://127.0.0.1:8082/temperature/t/{}/'.format(random.choice(username)))
        t.append(response.elapsed.total_seconds())
        print(random.choice(username),response.status_code,response.elapsed.total_seconds())
    print('total time',sum(t))

make_request()

DetailView 端点

class TempratureDetailView(DetailView):
    model = Temperature
    template_name = 'temperature/t_detail.html'

    def get_object(self, queryset=None):
        return Temperature.objects.get(username=self.kwargs.get('username'))

models.py

class Temperature(models.Model):
    username = models.TextField(db_index=True,primary_key=True)
    temperature = models.IntegerField(blank=True, null=True)

    class Meta:
        db_table = 'temperature'

持久性数据库设置

DATABASES = {

    'default': {

        'ENGINE': 'django.db.backends.postgresql_psycopg2',

        'NAME': '',

        'USER': '',

        'PASSWORD': '',

        'HOST': 'localhost',

        'PORT': '',

        'CONN_MAX_AGE': 600, #10 minutes

    }
}

【问题讨论】:

  • 您是在开发服务器还是在生产服务器上进行这些测试的?
  • @AbdulAzizBarkat- 这是在我的本地开发服务器上

标签: python django postgresql


【解决方案1】:

根据您在评论中的说明,您正在开发服务器上运行这些测试。
引用 Django 的documentation

开发服务器为它的每个请求创建一个新线程 句柄,否定持久连接的影响。不启用 他们在开发过程中。

基本上每个线程都会启动它自己的数据库连接,考虑到在测试中发出的请求数量以及CONN_MAX_AGE=60 的设置,很可能您的数据库不支持与服务器一样多的连接在这种情况下,导致关闭先前连接的等待时间更长,并且还否定了持久连接的使用。考虑到得出正确结论的情况,需要在生产服务器上进行更好的测试

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-01-12
    • 2010-11-10
    • 2013-08-03
    • 2017-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-10
    相关资源
    最近更新 更多