2016-02-22 2 views
2

Как я понимаю, Django имеет постоянные соединения с БД целых CONN_MAX_AGE.Как распределяются постоянные соединения Django (CONN_MAX_AGE)?

Если да, то каково правило для распространения соединения с приложением?

Например.

корпус 1. Соединения распределяется каждый раз, когда запросы приложения независимо от нескольких процессов, многопоточная среды. (Например, в асинхронной среде, каждый запрос может иметь соединение)

случай 2. соединения распределены для каждого потока (уровень резьбы)

корпус 3. соединения распределяются по каждому процессу (уровень процесса)

И есть ли способ контролировать это поведение ?,

есть ли пред- в БД для упрощения пула подключений БД в Django.

ответ

2
class ConnectionHandler(object): 
    def __init__(self, databases=None): 
     """ 
     databases is an optional dictionary of database definitions (structured 
     like settings.DATABASES). 
     """ 
     self._databases = databases 
     self._connections = local() 

Соединение является нитью локальной.

Обратите внимание, что с точки зрения БД разделение соединения между несколькими потоками почти всегда не рекомендуется.

И, конечно же, между процессами не передаются непостоянные данные.

Для пула соединений вам понадобится прокси-сервер между django и DB. Но если вы используете постоянные соединения, вы можете добиться подобного эффекта с помощью нескольких потоков в wsgi, которые будут содержать несколько подключений к БД.

+0

Таким образом, даже если есть два постоянных соединения и один поток заблокирован при запросе БД, другой может выполнять запрос БД, используя другое постоянное соединение параллельно. правильно ? – SangminKim

+0

Да. Даже если один поток заблокирован, другой поток имеет другое рабочее соединение (при условии, что БД в порядке). –

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