- 論壇徽章:
- 0
|
環(huán)境:
windowns win7
python 2.7.3
想測試下數(shù)據(jù)庫服務器能支持多少session,單個線程跑沒有問題,多個線程測試的時候,如果數(shù)據(jù)庫連接出錯,會導致整個測試程序崩潰。
代碼如下:
# -*- coding: gbk -*-
import cx_Oracle
import threading
import Queue
import time
import traceback
connCount = 0
queue = Queue.Queue()
connList = []
myClock = threading.RLock()
#db.close()
#數(shù)據(jù)庫連接
class DBConnect():
def getDBConnection(self):
global connCount
db = None
myClock.acquire()
try:
#建立連接 IP 端口 服務名
tns = cx_Oracle.makedsn('172.19.116.4',1521,'asmdb')
#用戶名 密碼 tns
db = cx_Oracle.connect('system','oracle',tns)
#連接數(shù)據(jù)庫session數(shù)量
connCount += 1
except Exception,e:
#print Exception ,":",e
#print "獲取數(shù)據(jù)庫連接失敗"
traceback.print_exc()
finally:
print "已經(jīng)建立的數(shù)據(jù)庫連接數(shù)為:",connCount
myClock.release()
if db !=None:
db.close()
return db
#測試數(shù)據(jù)庫連接
class testDBconn(threading.Thread):
def __init__(self,name):
threading.Thread.__init__(self)
self.setName(name)
#調(diào)用n次數(shù)據(jù)庫連接需要的時間
def run(self):
dbconn = DBConnect()
dbCount = 0
dbList = []
while True:
db = dbconn.getDBConnection()
if db != None:
dbList.append(db)
dbCount += 1
else:
print "Thread(%s) 已經(jīng)建立數(shù)據(jù)庫連接數(shù)為:%d" %(self.getName(),dbCount)
break
if __name__ == "__main__":
for x in range(2):
t = testDBconn(x)
t.start()
如果把數(shù)據(jù)庫監(jiān)聽關(guān)閉,然后運行程序,直接出現(xiàn)崩潰的提示:
截圖00.png (59.07 KB, 下載次數(shù): 38)
下載附件
2013-09-10 21:00 上傳
查了好久也沒有頭緒。求指點呀。如果不出現(xiàn)異常的話,測試程序是不會崩潰的。 |
|