【问题标题】:Django CONN_MAX_AGE option doesn't open persistent connectionDjango CONN_MAX_AGE 选项不打开持久连接
【发布时间】:2016-02-22 12:13:27
【问题描述】:

我像下面这样设置 DATABASE 设置并运行 Django App。

DATABASES = {
             'default': {
                         'ENGINE': 'django.db.backends.oracle',
                         'NAME': 'orcl',
                         'USER': 'smkim',
                         'PASSWORD': '1123',
                         'HOST': '168.192.15.18',
                         'PORT': '1521',
                         'CONN_MAX_AGE': 10,
                         'OPTIONS': {'threaded': True}
                         }
             }

为了确保如果 Django 打开 10 个持久连接,我发送如下 SQL。

SELECT username FROM v$session WHERE username='SMKIM';

但是,这个命令只返回2条记录(这是因为我生成了一个进程,结果两个进程分别有一个连接)。

为什么我设置了 10 个持久连接,Django 只打开 2 个连接?

(ps.应用程序正在使用线程池(5))

【问题讨论】:

    标签: python django persistent-connection


    【解决方案1】:

    'CONN_MAX_AGE' 设置一个连接在关闭之前的年龄,而不是应该有多少个,请参阅docs

    CONN_MAX_AGE

    默认值:0

    数据库连接的生命周期,以秒为单位。使用 0 关闭 每个请求结束时的数据库连接——Django 的历史记录 行为——无限制的持久连接。

    因此,当 Django 需要一个并且没有其他打开的连接时,连接将被打开,尽管 DB 可以关闭这种“持久”连接。有关详细信息,请参阅docs section

    【讨论】:

    • 感谢您的回答,我误解了参数,那么有没有办法让multiple-connection 用于多线程,以便他们尝试并行请求?
    • @asleea,据我所知,没有直接的方法可以指定您希望在 Django 中拥有多少个持久连接。 IMO,只需将CONN_MAX_AGE 设置为一个相当高的数字,Django 就会自己完成这项工作。它将在第一次请求时打开一个连接并保持它,直到它在 Django 或 DB 端超时关闭。对于进一步的请求,它将使用此连接,或者可能会在需要时打开一个新连接,然后使用多个连接,但是要了解何时以及如何发生这种情况,需要查看 Django 内部结构。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-16
    • 2010-11-10
    • 2020-01-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多