Я пишу код на питоне, в котором я установил соединение с базой данных. У меня есть запросы в цикле. Хотя запросы выполняются в цикле, если я отключу сетевой кабель, он должен остановиться с исключением. Но этого не происходит, Когда я снова подключаю сетевое устройство через 2 минуты, он снова начинается с того места, где он заканчивается. Я использую linux и psycopg2. Не отображается исключениеdb connection in python
ответ
Соединение с базой данных почти наверняка будет основано на сокете TCP. Сокеты TCP будут долгое время зависеть от повторной попытки до сбоя и (в python), создавая исключение. Не говоря уже и попытки повторного подключения/автоматического повторного соединения в слое базы данных.
Как сказал ответ Дугласа, он не будет вызывать исключения из-за 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.6 (для этого требуется версия с поддержкой backported для версии 2.5). Процесс лучше, потому что когда он будет убит, операционная система позаботится об освобождении и очистке ресурсов, в то время как убийство потока всегда является довольно опасным и беспорядочным бизнесом.
можно объяснить более подробно – ha22109
Начните с чтения http://docs.python.org/library/multiprocessing.html, в котором объясняется, как использовать модуль многопроцессорности в стандартной библиотеке (2.6 или выше Python; если вы на 2.5 , установите backport с code.google.com/p/python-multiprocessing/). Не так много места в комментарии, чтобы дать гораздо больше деталей, но идея такова: сделать две очереди quin и quout, сделать процесс с очередями, и когда вам нужно, чтобы SQL-запрос нажимал его на quin, процесс ожидает этой очереди, вытаскивает запрос, делает это, толкает результаты на quout; запрашивающий процесс убивает другого, если он занимает слишком много времени. –
- 1. db connection in form validation - WEB.PY - PYTHON
- 2. DB Connection in mongo-db native client
- 3. python db connection
- 4. ssh connection in python
- 5. Python Mocking db connection/unknown type in unit test
- 6. Close DB Connection in Slick 3.0
- 7. Multiproccessing with DB connection
- 8. Grails postgresql db connection
- 9. Connection Disappeared in Connection Pool
- 10. MySQL db connection
- 11. Connection String in Constructor
- 12. Connection String in C#
- 13. ObjectDB Connection in Eclipse
- 14. Test SQL Db Connection
- 15. Singleton DB Connection
- 16. App lost db connection
- 17. Check MySql DB Connection
- 18. C# db connection security
- 19. Leaked DB Connection
- 20. Close db connection
- 21. PHP OO DB Connection
- 22. Отмена Rails DB connection
- 23. cassandra db slow connection
- 24. Java couchdb4j DB connection
- 25. Orbeon Forms Postgres DB connection
- 26. Обновить LINQ db-connection object
- 27. LINQ connection in app.config
- 28. $ .connection undefined in signalR
- 29. close connection in destructor
- 30. close connection in LoadRunner
Сообщите нам ваш код? –
Кричать «нужна помощь срочно», вероятно, не лучший способ получить сочувствие. – bortzmeyer