0

我有继承自 twisted.enterprise.adbapi.ConnectionPool 类的 ConnPool 类。

class ConnPool(ConnectionPool):
    def __init__(self):  
        ConnectionPool.__init__(self, 'MySQLdb', address, user,pass, MYSQL_DB, charset='utf8', use_unicode=True, cp_min=1, cp_max=MAX_CONNECTION, cp_reconnect=True)

它适用于一个数据库连接。但是,我希望它在连接丢失时连接另一个数据库。

已完成连接丢失检测,但在这种情况下我无法管理 ConnPool 类来连接另一个数据库。

当特定事件发生时,我尝试重新初始化 ConnectionPool 类,但它不起作用。

任何想法/解决方案将不胜感激。

4

1 回答 1

1

看看ConnectionPool.connect,有没有你应该注意的地方。adbapi没有提供这种情况的逻辑,实现一些非常愚蠢的东西并不难,但需要更多注意的是行为。例如,ConnectionPool当所有服务器都关闭时如何反应?

这里只是一个愚蠢的实现:

class ArgumentPool:

    def __init__(self, connargs, connkw):
        assert len(connargs) == len(connkw)
        self.connargs = connargs
        self.connkw = connkw

    def next(self):
        while 1:
            for args, kwds in zip(self.connargs, self.connkw.values()):
                yield args, kwds


class RRConnectionPool(adbapi.ConnectionPool):

    def __init__(self, dbapiName, ap):
        adbapi.ConnectionPool.__init__(self, dbapiName)
        self.ap = ap

    def connection(self):
        # ...
        args, kwds = self.ap.next()
        conn = self.dbapi.connect(*args, **kwds)
        # ...
于 2013-01-15T17:22:41.920 回答