Python弱引用回调块

我正在使用Python和弱引用来实现数据库连接池。

当线程获得连接时,将使用会话来包装它。池中将使用weakref.WeakSet来维护会话的弱引用。

当会话没有强引用时,会话弱引用的回调函数将自动将连接返回到连接池。

class CheckOut:
    def __init__(self,pool):
        self.pool = pool
        self.session_pool = weakref.WeakSet()

    def recycle(self,connection):
        self.pool.put(connection)

    def add(self,session):
        connection = session.connection
        weakref.finalize(session,self.recycle,connection)
        self.session_pool.add(session)

但是,如果我在self.pool.put(connection)之前添加睡眠代码,例如time.sleep(1),则程序将阻塞,并且代码self.pool.put(connection)将不会执行,从而导致其他线程无法获得连接

iCMS 回答:Python弱引用回调块

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/2116904.html

大家都在问