дБ соединение в питоне - PullRequest
0 голосов
/ 15 мая 2009

Я пишу код на python, в котором я установил соединение с базой данных. У меня есть запросы в цикле. Во время выполнения запросов в цикле, если я отключу сетевой кабель, он должен остановиться с исключением. Но этого не происходит, когда я снова подключаю сетевой кабель через 2 минуты, он снова начинается с того места, где он закончился Я использую Linux и Psycopg2. Это не показывает исключение

Ответы [ 3 ]

2 голосов
/ 15 мая 2009

Как сказал ответ Дугласа, это не вызовет исключения из-за TCP.

Вы можете попробовать использовать socket.setdefaulttimeout (), чтобы установить более короткое время ожидания.

setdefaulttimeout (...)

   setdefaulttimeout(timeout)

   Set the default timeout in floating seconds for new socket objects.
   A value of None indicates that new socket objects have no timeout.
   When the socket module is first imported, the default is None.

Однако, это может не сработать, если соединение с вашей базой данных не построено с помощью сокета Python, например, собственного сокета.

2 голосов
/ 15 мая 2009

Ваше соединение с базой данных почти наверняка будет основано на сокете TCP. TCP-сокеты будут зависать в течение длительного времени, прежде чем произойдет сбой и (в python) возникнет исключение. Не говоря уже о повторных попытках / попытках автоматического переподключения на уровне базы данных.

1 голос
/ 15 мая 2009

Если вы хотите реализовать тайм-ауты, которые работают независимо от того, как клиентская библиотека подключается к серверу, лучше всего попытаться выполнить операции с БД в отдельном потоке, или, что лучше, в отдельном процессе, который «отслеживает» поток / процесс может убить при необходимости; см. модуль многопроцессорной обработки в стандартной библиотеке Python 2.6 (есть версия с бэкпортом для 2.5, если вам это нужно). Процесс лучше, потому что когда он убит, операционная система позаботится об освобождении и очистке ресурсов, в то время как уничтожение потока всегда является довольно небезопасным и грязным делом.

...