MS SQLサーバーにアクセスできなくなったときに、これに遭遇しました。これにより、コードにバグが発生し、プログラムが急停止し、もちろんユーザーの熊手や松明がドアに届きました。問題を要約すると、ユーザーのボブがダウンしたデータベースに接続しようとすると、もちろんプログラムが接続を試みるまで待機します。この時点でボブが待機しているときに、2番目のユーザーであるジョーが接続を試みた場合、彼も待機します。しばらくすると、ボブはタイムアウトになり、適切なエラーが発生します。ただし、Joeの接続はタイムアウトになり、セグメンテーション違反が発生してすべてが急停止します。
次のコードでこのエラーを確実に再現することができました
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)
これにより、最初のスレッドでエラーが発生した後、セグメンテーション違反が発生します。このセグメンテーション違反を停止する方法、適切にエラーを発生させる方法はありますか、それとも私がここで見逃しているものがありますか?
Pymssqlバージョン1.0.2およびpython2.6.6。