【发布时间】:2017-06-09 06:17:44
【问题描述】:
我有一个包含 3 个成员的 MongoDB 副本集和一个在其中存储数据的 Python 应用程序。
当使用带有包装器的单个文档插入时,我可以处理 pymongo 的 AutoReconnect 异常,如下所示:
def safe_mongo_call(method, num_retries, *args, **kwargs):
while True:
try:
return method(*args, **kwargs)
except (pymongo.errors.AutoReconnect,
pymongo.errors.ServerSelectionTimeoutError) as e:
if num_retries > 0:
logger.debug('Retrying MongoDB operation: %s', str(e))
num_retries -= 1
else:
raise
我不确定在使用批量写入时如何处理这些异常,例如insert_many 方法。根据documentation 的说法,批量写入不是原子的,因此即使发生其中一种异常,也可能已经有一些文档成功写入数据库。因此,我不能像上面那样简单地重用包装器方法。
处理这些情况的最佳方法是什么?
【问题讨论】:
-
您提供的代码与我在问题中发布的代码基本相同。我的用例不同,涉及不能简单重试的批量操作,因为部分文档已经可以写入数据库。
标签: mongodb pymongo bulkinsert replicaset