如何检查PyMongo连接仍然存在?

Dam*_*mir 1 python pymongo

如何检查PyMongo连接仍然存在?有没有优雅的方法来做这个或只是尝试一个简单的查询和解析器结果?

kri*_*aps 6

我不认为有一种优雅的方式.Pymongo具有AutoReconnect异常,如果先前建立的连接丢失,则会抛出该异常.您应该捕获此异常并重试将导致重新建立​​连接的操作.

我发现一种相对无痛的方法来处理AutoReconnects是在单独的方法中隔离数据库操作,并用类似于此的装饰器包装它们:

from pymongo.errors import AutoReconnect

def autoreconnect_retry(fn, retries=3):
    def db_op_wrapper(*args, **kwargs):
        tries = 0

        while tries < retries:
            try:
                return fn(*args, **kwargs)

            except AutoReconnect:
                tries += 1

        raise Exception("No luck even after %d retries" % retries)

    return db_op_wrapper
Run Code Online (Sandbox Code Playgroud)

用法:

@autoreconnect_retry
def insert_foo_record(foo):
    # Perform db operation
    pass

@autoreconnect_retry(20)
def get_foo_record(id):
    # Perform db operation
    pass
Run Code Online (Sandbox Code Playgroud)