LINUX.ORG.RU

sqlalchemy postgresql и fork


0

0

Привет,

какая то непонятность у меня получается когда я делаю fork. Обрывается соединение с серваком postgres. Почему - не понятно. 

Тоесть у меня библиотека, моя. В которой создается подключение (engine) к серверу. Там же создается session factory.

Потом я в программе делаю форк. При этом либо в форкнутом просессе, либо в форкающем обрывается соединение с базой.  непонятно отчего такое? 

Потом получаю такое сообщение об ошибке

Module sqlalchemy.engine.base:946 in _handle_dbapi_exception         
<<                  if self.__close_with_result:
                        self.close()
                raise exc.DBAPIError.instance(statement, parameters, e, connection_invalidated=is_disconnect)
            finally:
                del self._reentrant_error>>  raise exc.DBAPIError.instance(statement, parameters, e, connection_invalidated=is_disconnect)
<class 'sqlalchemy.exc.ProgrammingError'>: (ProgrammingError) server closed the connection unexpectedly This probably means the server terminated abnormally before or while processing the request. 'SELECT executions.starte


В логе сервера такая запись

2008-08-27 15:29:10 CEST LOG:  could not receive data from client: Connection reset by peer
2008-08-27 15:29:10 CEST LOG:  unexpected EOF on client connection

Кто закрывает соединение и почему?!

Спасибо
Ответ на: комментарий от Kpoxman

Дык вот как же быть? Вот в чем вопрос.

Пробую в обоих процессах сделать Session.remove(), не помогает. По идее же если потом я новую сессию открываю, новое соединение должно открыться. Вот чего ей надо?

the_moon
() автор топика

:) это как вопрос ребенка "папа, а почему я умею водить машину? ведь ты же умеешь". Форк - создание нового процесса потомка, он наследует только файловые дескрипторы, ни больше, ни меньше. Если хочешь пользоваться одним коннектом, то тебе не форк создавать нужно, а поток. Это как вторая мысль в той же голове, где и первая :).

Deleted
()
Ответ на: комментарий от Deleted

а мне кажется это драйвер к postgres балуется. С теми же sqlite и mysql драйверами все работает. Коннекты не теряются.

the_moon
() автор топика
Ответ на: комментарий от the_moon

чтобы после форка "оставалось" соединение должны быть поддержка в драйвере базы. В тех базах что у тебя работает, я подозреваю, просто pid процесса мониторится. Если он изменился(т.е. произошёл форк) то он просто устанавливает новое соединение(имхо).

true_admin ★★★★★
()
Ответ на: комментарий от true_admin

Проблема в том, что я юзаю sqlalchemy и мне не совсем понятно, как там это происходит в нутрях.

Мне не нужно, что бы соединение оставалось, я бы с удовольствием его пересоздал бы. Только не пойму как.

the_moon
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.