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)

1 つのデータベース接続で問題なく動作します。しかし、接続が失われたときに別のデータベースに接続したい。

接続が失われたことの検出は行われますが、この状況では 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 に答える