Djongo продолжает закрывать и создавать новые соединения с БД MongoClient при каждом запросе
Я использую djongo для соединения моего Django REST framework API с кластером MongoDB, и при регистрации запросов на уровне DEBUG я вижу, что djongo начинает каждый запрос с закрытия существующего соединения MongoClient, создания нового соединения, выполнения запроса, затем снова закрывает соединение.
2021-09-18 13:41:34,714 - DEBUG - djongo.base - Existing MongoClient connection closed
2021-09-18 13:41:34,715 - DEBUG - djongo.base - New Database connection
2021-09-18 13:41:34,716 - DEBUG - djongo.sql2mongo.query - sql_command: ...
2021-09-18 13:41:35,340 - DEBUG - djongo.sql2mongo.query - Aggregation query: ...
2021-09-18 13:41:35,343 - DEBUG - djongo.sql2mongo.query - Result: ...
2021-09-18 13:41:35,454 - DEBUG - djongo.base - MongoClient connection closed
Почему он закрывает соединение при каждом запросе и как я могу остановить это поведение? Он должен инициировать соединение с БД при запуске веб-сервера и продолжать использовать это соединение для всех запросов, вместо того, чтобы создавать сотни соединений каждую секунду.
Релевантные коды из djongo/base.py
:
if self.client_connection is not None:
self.client_connection.close()
logger.debug('Existing MongoClient connection closed')
self.client_connection = Database.connect(db=name, **connection_params)
logger.debug('New Database connection')
def _close(self):
"""
Closes the client connection to the database.
"""
if self.connection:
with self.wrap_database_errors:
self.connection.client.close()
logger.debug('MongoClient connection closed')
Для установки и настройки я следовал инструкциям djongo
GitHub, так что все выглядит следующим образом:
DATABASES = {
"default": {
"ENGINE": "djongo",
"NAME": "django",
"CLIENT": {
"host": f"mongodb+srv://{MONGODB_PATH}",
}
}
}
(MONGODB_PATH = f"{MONGODB_DJANGO_USER}:{MONGODB_DJANGO_PASS}@{MONGODB_CLUSTER}"
из переменных окружения)
Конечная точка API, с которой я тестирую, выглядит следующим образом:
@api_view(["GET"])
@authentication_classes([TokenAuthentication])
@permission_classes([IsAuthenticated])
def test(request):
if request.method == "GET":
data = {"user": str(request.user)}
return JsonResponse(data)
Версии:
Django==3.2.7
djangorestframework==3.12.4
djongo==1.3.6
pymongo==3.12.0 (MongoDB 4.4.8 Enterprise)