2015-10-23 44 views

回答

1

它看起來像我能做到這一點__del__()或使課堂上下文管理器並關閉__exit__()連接。我想知道哪一個更加Pythonic。

我不會有什麼更「Python化」發表評論,因爲這是一個非常主觀問題。

但是,Python並沒有對何時調用析構函數做出非常嚴格的保證,使得上下文/ __exit__在這裏接近正確。

+1

我也使用上下文管理器來做到這一點。它運行良好,但是需要做的是確保所有連接都通過上下文管理器調用,否則您不會釋放它們。也許使用\ __ exit__ **和** \ __ del__?我沒有那樣做 - 寫了一些代碼來檢查堆棧,並且如果它不是上下文管理器調用,則拋出異常。 –

+1

只是不建立'__enter__'方法之外的連接。問題解決了。 –

+0

啊,啊。聰明。我會看看我是否重構我的代碼來做到這一點。否則,是的上下文管理員很酷。啊,另一件事,他們確實強制實例生命週期的一些約束 - 我的連接在django視圖上啓動,並在響應發送時終止。我必須重構其他類,這些類傾向於保留數據庫連接,並將連接作爲參數傳遞給它們的方法。 –

相關問題