2011-08-24 2 views
3

MS SQL 서버에 연결할 수 없을 때이 문제가 발생했습니다. 이로 인해 우리 프로그램의 버그가 발생하여 우리 프로그램이 눈부시게 멈추었습니다. 우리는이 문제를 해결할 수있었습니다. 사용자 Bob이 다운 된 데이터베이스에 연결을 시도하면 프로그램이 연결을 시도하는 동안 물론 기다릴 것입니다. Bob이 대기하는 동안이 시점에서 두 번째 사용자 인 Joe가 연결을 시도하면 대기하게됩니다. 잠시 후 Bob은 시간 초과되어 적절한 오류가 발생합니다. 그러나 Joe의 연결은 시간이 초과되고 세그멘테이션 오류가 발생하여 모든 것을 정지시킵니다.Segfault가 pymssql을 사용하여 여러 스레드에서 서버에 연결할 수없는 경우

우리는 안정적으로 첫 번째 스레드가 오류의 제기 후 segfault의 원인이됩니다 다음 코드

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를 중지 할 수있는 방법이 있습니까, 오류를 올바르게 발생 시키거나 여기에 누락 된 것이 있습니까?

Pymssql 버전 1.0.2 및 Python 2.6.6.

답변

2

우리는 pymssql의 사용자 그룹에서도 질문을하고 우리의 모든 기반을 다룰 것을 요청했습니다. According to one of the developers pymssql은 현재 안정적인 릴리스에서 스레드 안전하지 않습니다. 1.9 릴리스 나 다음 2.0 릴리스에있는 것 같습니다. 아마도 다른 모듈로 전환하거나 연결 풀러를 사용할 것입니다. 그러나 그것은 아마도 붕대 고정 장치가 될 것이고 실제로는 이상적이지는 않을 것입니다.

관련 문제