2015-11-16 24 views
1

我使用MySQLdb作爲我的python-mysql連接。我的測試代碼如下:爲什麼MySQLdb獲取重複的db連接

for i in range(6): 
    db = MySQLdb.connect('localhost','user','passwd','test')) 
    print db 

我得到的結果如下:

_mysql.connection open to localhost at 1bba010 
_mysql.connection open to localhost at 1c1ba90 
_mysql.connection open to localhost at **1c34fa0** 
_mysql.connection open to localhost at **1c3cdb0** 
_mysql.connection open to localhost at **1c34fa0** 
_mysql.connection open to localhost at **1c3cdb0** 

你會發現最後兩個連接對象是重複的。當我使用多進程來查詢mysql時,這是一個問題。即當一個進程完成工作時,它會關閉連接,而其他人仍然使用相同的數據庫連接,我應該如何解決這個問題。

回答

1

內存位置的重新使用不成問題。在您的測試程序中,您正在關閉連接並釋放對象。這意味着內存被釋放,並可供重複使用。然後您創建一個新的連接對象,並再次使用內存位置。

這些地址是交替的,因爲對象1在創建對象2之後才釋放,對象2在創建對象3之前未釋放,等等。

+0

我刪除了db.close(),我仍然得到相同的連接對象。 – Jack

+0

我正在使用多進程來查詢mysql,每個進程我創建了一個新的連接,但他們有重複。當相同的連接被前面的過程關閉時,它會導致異常。我很困惑,MySQLdb中是否有默認的連接池?如果是這樣,我真的不想使用它。 – Jack

+0

db.close不是有趣的部分。當對象被釋放時,連接可能隱式關閉。 –