当我们的 MS SQL 服务器无法访问时,我们遇到了这种情况。这导致了我们代码中的一个错误,导致我们的程序突然停止,当然还有用户的干草叉和手电筒到我们家门口。我们已经能够将问题归结为:如果用户 Bob 尝试连接到故障数据库,他当然会在程序尝试连接时等待。如果此时 Bob 正在等待,第二个用户 Joe 尝试连接,他也会等待。一段时间后,Bob 将超时并引发适当的错误。然而,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 和 python 2.6.6。