3

Django 1.6 представляет Persistent Connections feature. Однако я заметил, что выход из скрипта, использующего ORM django, оставляет хотя бы некоторые из соединений, открытых на стороне db.
Настройка: django 6.0, postgres 9.2 и psycopg2 2.5.1.Закрытие соединения db с постоянным соединением django в многопоточном скрипте

Как вы изящно закрываете соединение с базой данных из сценария?

В разделе caveats упоминается, что django открывает соединение на поток, поэтому в многопоточном скрипте django создает соединение для потока, даже для потоков, которые не имеют доступа к db?
Нужно ли каждому потоку закрыть соединение db отдельно?

Если ответ на оба вопроса выше да, что вы можете делать с потоками демона (например, для комм), которые не присоединяются к выходу сценария?

+0

Привет, Я использую подобную настройку и имею те же проблемы с дендлинг-соединениями. Вы нашли решение этой проблемы? – user1102018

ответ

5

я столкнулся с той же проблемой только сейчас ...

решаемым его, вызвав следующий код, когда мой выход из нити:

from django.db import close_old_connections 
close_old_connections() 
+0

этот ответ не касается сложностей многопоточности – Jonathan

2

Я просто обновлен и было это придумать и close_old_connections в основной процесс перед запуском вспомогательных процессов не работает, как старый close_connections, чтобы дать каждому процессу их собственное соединение. Но если вы посмотрели, что использовать close_connections, вы можете его воссоздать docs.

Так что я делаю это в своем основном процессе перед созданием своих подпроцессов.

from django.db import connections 
for conn in connections.all(): 
    conn.close() 

И он отлично работает. Новый close_old_connections только закроет соединение, если оно истекло или ушло.