javedimka, тогда нужно плодить класс для каждого процесса, а это жрет память. Хотя, в целом можно сделать что то типо класса менеджера и плодить их, где будет создавать пулл, а сами функции вынести в класс обработчик. Ну, вообщем я схему понял, еще раз большое спасибо, я бы не разобрался бы сам.
Сергей Тихонов, я заменил на данный момент пулл подключений на явное подключение и сразу же закрываю его после использования. Все перестало падать. Можно ли решить эту проблему в моем случае используя пулл? И да, ваше решение работает, большое вам спасибо!
Сергей Тихонов, у меня все процессы используют один и тот же объект класса, потому что синглтон. Соответственно один и тот же пулл подключений на всех. Так что по сути не важно где я буду инициализировать пулл подключений, все равно все будут использовать один и тот же. Что если закрывать пулл при создании нового процесса, а в декораторе перед запросом подключения сделать проверку на валидность пула, и если он закрыт, заново инициализировать подключение. Просто во время инициализации новых процессов, старые в это время общаются с бд.
Сергей Тихонов, форк порождает новый процесс. Т.е. при инициализации нового процесса или подпроцесса мне надо переинициализировать connection pool? Или я не так Вас понял?
Сергей Тихонов, после обращения к базе данных я закрываю курсор и возвращаю объект подключение в пулл. Это реализовано через декоратор. Так же у меня стоит autocommit = True, т.е. я не пложу атомарных транзакций.
Что еще мне необходимо сделать?
Я мог бы сделать подключение явным, а не через пулл, и закрывать его каждый раз, но это сильно замедлит скорость работы программы.
Гуглю уже неделю, не могу найти ответ, видимо плохой из меня гуглист х)
Да, вы правы, при создании класса Postgresql происходит создание пула подключений, откуда при необходимости берется подключение. На данный момент в драйвере указан лимит подключений от 1 до 400. В базе стоит ограничение в 100. (Я не уверен что до конца знаю как это работает и синхронизируется.) Так же есть класс синглтона который является метаклассом класса Postgresql и смотрит за тем что бы, все обращения к этому классу велись через один экземпляр класса. Соответственно все потоки используют один пул подключений.
Вы можете объяснить мне, каким образом мне поможет увеличение кол-ва доступных подключений?
Написано
Войдите на сайт
Чтобы задать вопрос и получить на него квалифицированный ответ.