Как уменьшить количество соединений, создаваемых многопоточным запросом 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.

Вернуться на верх