標籤:串連池
使用第三方包
https://pypi.python.org/pypi/DBUtils
tar -zxvf *.tar.gz * python3 setup.py build && python3 setup.py install
import timeimport pymysqlimport threadingfrom DBUtils.PooledDB import PooledDB, SharedDBConnectionPOOL = PooledDB( creator=pymysql, # 使用連結資料庫的模組 maxconnections=6, # 串連池允許的最大串連數,0和None表示不限制串連數 mincached=2, # 初始化時,連結池中至少建立的閒置連結,0表示不建立 maxcached=5, # 連結池中最多閑置的連結,0和None不限制 maxshared=3, # 連結池中最多共用的連結數量,0和None表示全部共用。PS: 無用,因為pymysql和MySQLdb等模組的 threadsafety都為1,所有值無論設定為多少,_maxcached永遠為0,所以永遠是所有連結都共用。 blocking=True, # 串連池中如果沒有可用串連後,是否阻塞等待。True,等待;False,不等待然後報錯 maxusage=None, # 一個連結最多被重複使用的次數,None表示無限制 setsession=[], # 開始會話前執行的命令列表。如:["set datestyle to ...", "set time zone ..."] ping=0, # ping MySQL服務端,檢查是否服務可用。# 如:0 = None = never, 1 = default = whenever it is requested, 2 = when a cursor is created, 4 = when a query is executed, 7 = always host='127.0.0.1', port=3306, user='root', password='123', database='pooldb', charset='utf8')def func(): # 檢測當前正在運行串連數的是否小於最大連結數,如果不小於則:等待或報raise TooManyConnections異常 # 否則 # 則優先去初始化時建立的連結中擷取連結 SteadyDBConnection。 # 然後將SteadyDBConnection對象封裝到PooledDedicatedDBConnection中並返回。 # 如果最開始建立的連結沒有連結,則去建立一個SteadyDBConnection對象,再封裝到PooledDedicatedDBConnection中並返回。 # 一旦關閉連結後,串連就返回到串連池讓後續線程繼續使用。 conn = POOL.connection() # print(th, '連結被拿走了', conn1._con) # print(th, '池子裡目前有', pool._idle_cache, '\r\n') cursor = conn.cursor() cursor.execute('select * from tb1') result = cursor.fetchall() #並沒有關閉,只是把串連放回到了串連池中 conn.close()func()
開發自訂Mysql串連池