Мы столкнулись с этим, когда наш сервер MS SQL стал недоступным.Это вызвало ошибку в нашем коде, которая привела к полной остановке нашей программы и, конечно, к нашим дверям вилы и факелы пользователей.Мы смогли свести нашу проблему к следующему: если пользователь, Боб, попытается подключиться к отключенной базе данных, он, конечно, будет ждать, пока программа попытается подключиться.Если в этот момент, пока Боб ждет, второй пользователь, Джо, попытается подключиться, и он тоже будет ждать.Через некоторое время у Боба истечет время ожидания, и появится правильная ошибка.Однако соединение Джо истекает, и возникает ошибка сегментации, приводя к полной остановке.
Мы смогли надежно воспроизвести эту ошибку с помощью следующего кода
import threading
import datetime
import time
import pymssql
class ThreadClass(threading.Thread):
def run(self):
now = datetime.datetime.now()
print "%s connecting at time: %s" % (self.getName(), now)
conn = pymssql.connect(host="10.255.255.1", database='blah',
user="blah", password="pass")
for i in range(2):
t = ThreadClass()
t.start()
time.sleep(1)
Это приведет кsegfault после первого потока поднимает свою ошибку.Есть ли способ остановить этот segfault, заставить его правильно вызвать ошибку, или я что-то упускаю здесь?
Pymssql версии 1.0.2 и python 2.6.6.