Форум сайта python.su
0
Есть внутренний сервер по такому пути:
request = 'http://192.168.0.119:8066/api/nodes'
Я скачиваю из него дату:
urllib2.urlopen(request)
Никак не уразумею, как мне быстро понять,что сервер не доступен. Из дома например, или когда какой-то факап сети, он начинает по 20секунд обдумывать, прежде чем выдать эррор.
Значит я пытался использовать модуль ping ( http://stackoverflow.com/questions/316866/ping-a-site-in-python ), не понял как им воспользоваться в моем случае - он такой запрос не понимает. Еще пробовал NetServerGetInfo ( http://msdn.microsoft.com/en-us/library/windows/desktop/aa370624(v=vs.85).aspx )
Он тоже не подходит.
Как правильно поступать?
Офлайн
14
Michael_LevinТАк и понять - ловить таймаут. Его можно сделать меньше.
как мне быстро понять,что сервер не доступен
Офлайн
75
Может это ?
>>> a=urllib.urlopen2('http://www.google.com/', timeout=1) >>> a.getcode() 200
Отредактировано Singularity (Авг. 22, 2012 19:55:13)
Офлайн
0
в общем, наверное, да, можно через таймаут, хотя в моем случае не очень понятно - дата скачивается за допустим 7 секунд, и если таймаут указать меньше он вылетает с ошибкой.
еще можно так:
http://snipplr.com/view/19639/
ping конечно поставил, он просто именно мой запрос не разобрал
спасибо!
Офлайн
14
Michael_Levin, попробуй выставить таймаут именно на процесс соединения.
Офлайн
0
odnochlenимеется в виду это?
Michael_Levin, попробуй выставить таймаут именно на процесс соединения.
socket.create_connection(('192.168.0.119', 8066), 1) socket.create_connection(('192.168.0.119', 8068), 1)
Офлайн
14
Вообще-то я имел в виду как-нибудь прописать это в http клиент, но так тоже можно - проверяем порт, если работает - запрашиваем файл.
Офлайн
def is_alive(address, port): s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) try: s.connect((address, port)) return True except: return False
Офлайн
0
спасибо, ребят, так нормально!
Офлайн