數據庫鏈接池
python編程中可使用MySQLdb進行數據庫的鏈接及諸如查詢/插入/更新等操做,
可是每次鏈接mysql數據庫請求時,都是獨立的去請求訪問,至關浪費資源,
並且訪問數量達到必定數量時,對mysql的性能會產生較大的影響。
所以,實際使用中,一般會使用數據庫的鏈接池技術,來訪問數據庫達到資源複用的目的。
python的數據庫鏈接池包 DBUtils:
DBUtils是一套Python數據庫鏈接池包,並容許對非線程安全的數據庫接口進行線程安全包裝。DBUtils來自Webware for Python。
DBUtils提供兩種外部接口:
* PersistentDB :提供線程專用的數據庫鏈接,並自動管理鏈接。
* PooledDB :提供線程間可共享的數據庫鏈接,並自動管理鏈接。
下載地址:https://pypi.python.org/pypi/DBUtils/ 下載解壓後,使用python setup.py install 命令進行安裝
或者使用
#!/usr/bin/env python
# -*- coding:utf-8 -*-
import MySQLdb
from DBUtils.PooledDB import PooledDB
db_config = {
"host": "192.168.48.128",
"port": 3306,
"user": "root",
"passwd": "123456",
"db": "python",
"charset": "utf8"
}
pool = PooledDB(MySQLdb, 5, **db_config) # 5爲鏈接池裏的最少鏈接數
conn = pool.connection() # 之後每次須要數據庫鏈接就是用connection()函數獲取鏈接就行了
cur = conn.cursor()
SQL = "select * from tmp;"
r = cur.execute(SQL)
r = cur.fetchall()
print(r)
cur.close()
conn.close()
PooledDB的參數:
1. mincached,最少的空閒鏈接數,若是空閒鏈接數小於這個數,pool會建立一個新的鏈接
2. maxcached,最大的空閒鏈接數,若是空閒鏈接數大於這個數,pool會關閉空閒鏈接
3. maxconnections,最大的鏈接數,
4. blocking,當鏈接數達到最大的鏈接數時,在請求鏈接的時候,若是這個值是True,請求鏈接的程序會一直等待,直到當前鏈接數小於最大鏈接數,若是這個值是False,會報錯,
5. maxshared 當鏈接數達到這個數,新請求的鏈接會分享已經分配出去的鏈接
在uwsgi中,每一個http請求都會分發給一個進程,鏈接池中配置的鏈接數都是一個進程爲單位的(即上面的最大鏈接數,都是在一個進程中的鏈接數),而若是業務中,一個http請求中須要的sql鏈接數不是不少的話(其實大多數都只須要建立一個鏈接),配置的鏈接數配置都不須要太大。
鏈接池對性能的提高表如今:
1.在程序建立鏈接的時候,能夠從一個空閒的鏈接中獲取,不須要從新初始化鏈接,提高獲取鏈接的速度
2.關閉鏈接的時候,把鏈接放回鏈接池,而不是真正的關閉,因此能夠減小頻繁地打開和關閉鏈接