Я пытаюсь написать какой-нибудь отказоустойчивый код Python. У меня есть два удаленных сервера с файлами в общих папках. Я хочу получить доступ к этим файлам по крайней мере на одном сервере.
Я пробую каждый сервер, используя ping перед чтением файлов. Но стоит ли делать что-то еще после открытия файла? Какие исключения я могу получить, используя функцию read()
для дескриптора, который не может получить доступ к серверу? Как правильно все это обрабатывать?
def get_working_server():
logger = log_tools.get_logger(__name__)
servers = ["server1", "server2"]
while True:
try:
return try_server_each(servers[0])
except errors.ServerIsDownError:
try:
return try_server_each(servers[1])
except errors.ServerIsDownError:
logger.error("Waiting for any to be up, sleeping for 2 seconds")
time.sleep(2)
def try_server_each(server):
logger = log_tools.get_logger(__name__)
logger.info("Trying %(d_o_d)s on availability" % {"d_o_d": server})
response = os.system("ping -n 1 " + server)
if response == 0:
logger.debug("It's up")
return "\\\\" + server
else:
logger.warning("It's down")
raise errors.ServerIsDownError