Mam zestaw replik MongoDB z 3 elementami i aplikacją Python, która przechowuje w niej dane.Jak radzić sobie z wyjątkiem AutoReconnect pymongo z metodą insert_many
mogę poradzić pymongo za AutoReconnect
wyjątek przy użyciu pojedynczych wkładek dokumentu z obwolutą następująco:
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
nie jestem pewien, choć jak do obsługi tych wyjątków przy użyciu większość pisze, np Metoda insert_many
. Zgodnie z documentation, zapisy masowe nie są atomowe, więc nawet jeśli wystąpi jeden z wyjątków, może być już kilka dokumentów zapisanych do bazy danych z powodzeniem. W związku z tym nie mogę po prostu ponownie użyć metody opakowania jak wyżej.
Jaki jest najlepszy sposób radzenia sobie w takich sytuacjach?
Stosowna: https : //gist.github.com/anthonywu/1696591 – TheChetan
Kod, który podałeś, działa w zasadzie tak samo, jak to, co napisałem w pytaniu. Mój przypadek użycia jest inny i obejmuje operacje zbiorcze, których nie można po prostu powtórzyć, ponieważ część dokumentów może już zostać zapisana w bazie danych. –