在Python中如果对象定义了__del__
方法的话,在对象的引用记数为0时会自动调用__del__
方法
(很象c++中的析构函数),但如果A对象引用B对象,B对象又引用A对象,就形成循环引用,此时A,B对象
引用次数都为1。python就无法正常调用__del__
方法,原计划在__del__
方法里释放的资源自然也就无
法释放。
一个连接池拥有多个连接,而每个连接又拥有这个连接池的实例(一个叫pool的属性)。这样就产生了刚刚
说的哪个问题。我想到的办法就是在每次从池中获取连接的时候将连接的pool设置为当前实例,然后在归
还这个连接的时候再将其设置为None,并且要在这个连接对象的__del__
方法中将pool属性设置为
None。具体看代码吧。(目前只实现了SQLite3的)