Среда: Python 3.8.1, Windows 10 x64, pandas, q python.
Intro :
У меня есть скрипт, который подключается к удаленному серверу KDB через VPN-соединение. (Сервер KDB допускает только последовательные запросы (без параллельных запросов)). Проблема в том, что мой провайдер сбрасывает соединение каждые несколько часов, а затем провайдер восстанавливает соединение, но с другим назначенным IP. Когда соединение теряется, VPN-клиент, установленный на моей машине, также теряет соединение. Затем я переустанавливаю sh VPN-соединение, но скрипт не продолжает работать, и только перезапуск всего скрипта заставляет его продолжать работать.
Вот часть кода, которая отвечает для восстановления соединения: К сожалению, это не работает, как я себе представлял.
Объяснение кода:
Я поместил в цикл операторы try / исключением , Все работает хорошо (запрос отправлен, и т. Д. c.), Пока не будет получено исключение.
Я подозревал, что внутреннее соединение потеряно, поэтому я снова поставил q.open (). Согласно выходным данным соединение должно быть восстановлено, но это не так. По какой-то причине он входит в бесконечное число l oop, и я не могу понять, почему.
sendQueryOpenPricesGood = False
while not sendQueryOpenPricesGood:
try: # sending the query
print('\nattempt to send open prices query to KDB server (quick, several seconds)...') # debug
df_openPrices = pd.DataFrame(q.sendSync(query_openPrices))
sendQueryOpenPricesGood = True
print('Open prices query sent!\n') # debug
except: # if anythong wrong happens, retry
print('Connection error occurred on sending open prices query to KDB server (keyword: sendQueryOpenPricesGood). Is VPN turned on?')
print('\nattempt to close the connection to KDB server. Loop: sendQueryOpenPricesGood')
q.close()
print('connection to KDB server closed!.')
print('attempt to re-establish the connection to KDB server...')
q.open()
print('Connection to KDB server re-established!\n')
continue
Вывод:
attempt to send open prices query to KDB server (quick, several seconds)...
Connection error occurred on sending open prices query to KDB server (keyword: sendQueryOpenPricesGood). Is VPN turned on?
attempt to re-establish the connection to KDB server...
Connection to KDB server re-established!
Метод try / исключением / continue является valid и все же есть что-то, что я упускаю.
EDIT:
Я добавил оператор, чтобы сначала закрыть соединение q.close () и затем попытаться установить новое соединение с помощью q.open () .
Одна капля соединения Inte rnet произошла в них среднее время. И похоже, что сначала закрытие соединения помогло. Однако, чтобы убедиться, что он действительно работает, нужно еще немного времени.