Невозможно повторно подключиться к серверу KDB после потери и восстановления сетевого подключения - PullRequest
0 голосов
/ 15 марта 2020

Среда: 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 произошла в них среднее время. И похоже, что сначала закрытие соединения помогло. Однако, чтобы убедиться, что он действительно работает, нужно еще немного времени.

...