我不认为有一种优雅的方式.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)
| 归档时间: |
|
| 查看次数: |
4053 次 |
| 最近记录: |