Как уменьшить количество соединений, создаваемых многопоточным запросом Django?
Мой проект устроен примерно так
thread_pool = ThreadPoolExecutor()
def my_background_thread(model: MyModel): 
     # Other DB Reads here
     ...
     # Some long running action here, spawning several threads
     ...
    
     # Save result of action to DB 
     model.field = val 
     model.save()
     # Other DB writes 
     ...
   
    
def my_view(request):
   model = MyModel.objects.get(...)
   
   thread_pool.submit(my_background_thread, model)
   # Return before thread has completed 
   return HttpResponse("success")
К сожалению, из-за того, как я его настроил, Django создает слишком много соединений с БД - больше, чем нужно, и превышает мои лимиты БД.
Некоторые непонятные моменты:
- Когда я передаю модель новому потоку, создается ли в этот момент новое соединение? Создается ли новое соединение только при чтении/записи в модель? Только когда я пишу?
- Как проверить количество открытых соединений или показать, когда создается соединение?
Короче говоря, как я могу предотвратить создание Django слишком большого количества соединений в этом сценарии?
EDIT: Чтобы уточнить, проблема в том, что узким местом должна быть многопоточная работа, связанная с IO, а нагрузка на БД должна быть относительно небольшой по сравнению с этим. Однако Django открывает слишком много соединений и/или сохраняет их дольше, чем следует, что и приводит к снижению нагрузки на IO.