django с постоянным подключением к базе данных gunicorn не используется повторно - PullRequest
0 голосов
/ 10 мая 2018

Недавно я столкнулся с проблемой, связанной с веб-сайтом django, обслуживаемым gunicorn, а рабочий класс - gevent.

База данных PostgreSQL часто жалуется на слишком большое количество соединений. В django settings.py я установил для базы данных CONN_MAX_AGE значение 6, поэтому django повторно использует соединение с базой данных в течение 6 секунд. Но я обнаружил, что Django не использует их повторно.

после некоторого копания я обнаружил, что кто-то говорит, что асинхронный рабочий из gunicorn вызовет эту проблему:

Постоянные подключения к базе данных с асинхронными рабочими в Django> = 1.6 не удается

Не используйте Gunicorn для размещения своих сайтов Django на Heroku

Но я думаю, что это правильная причина, но я не знаю почему.

Кто-нибудь может проанализировать эту проблему из принципа асинхронного работника или исходного кода gunicorn и объяснить это?

После просмотра исходного кода модуля django db я знаю, что django сохранит соединение с базой данных в ConnectionHandler () ._ соединений, который является theading.local (), и будет использовать его, если оно не устарело. из-за theading.local (), поэтому он разделен на потоки.

Но я думаю, что асинхронный работник обрабатывает запрос асинхронно и находится в одном потоке, поэтому я не знаю, почему асинхронный работник может вызвать эту проблему.

любое предложение будет полезным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...