2016-02-22 2 views
1

Я установил настройку DATABASE, как показано ниже, и запустил приложение Django.Параметр Django CONN_MAX_AGE не открывает постоянное соединение

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 записей (Это потому, что икру процесс, в результате два процесса имеет одно соединение, соответственно).

Почему Django открывает только 2 соединения, даже я установил 10 постоянных соединений? (. П.с. приложение использует пул потоков (5))

ответ

4

'CONN_MAX_AGE' устанавливает возраст одного соединения до его закрытия, а не так, как многие из них не должно быть, см docs:

CONN_MAX_AGE

по умолчанию: 0

Время жизни соединения с базой данных, в секундах. Используйте 0 для закрытия соединений с базой данных в конце каждого запроса - поведение Django - и None для неограниченных постоянных подключений.

Таким образом, соединение будет открыто, когда Django нуждается в нем, и нет другого открытого соединения, хотя DB может закрыть такое «постоянное» соединение на своей стороне. См. docs section для более подробной информации.

+0

Спасибо за ваш ответ, я неправильно понял параметр. Так есть ли способ иметь «множественное соединение» для многопоточного потока, чтобы они пытались запросить параллельно? – SangminKim

+1

@asleea, насколько я помню, нет простого способа указать, сколько постоянных соединений вы хотите иметь в Django. IMO, просто установите 'CONN_MAX_AGE' на достаточно большом количестве, и Django выполнит эту работу самостоятельно. Он откроет соединение по первому запросу и сохранит его, пока он не будет закрыт при тайм-ауте на стороне Django или DB. Для дальнейшего запроса он будет использовать это соединение или может открыть новый, если потребуется, а затем использовать несколько соединений, но чтобы понять, когда и как это произойдет, необходимо посмотреть в внутренних компонентах Django. – Nikita

Смежные вопросы