Проблемы с соединением с fxcmpy REST API - PullRequest
0 голосов
/ 21 февраля 2020

Я использую REST API от fxcmpy для подключения к моей учетной записи fxcmpy. После обновления до версии 1.2.6 у меня возникают проблемы с переподключением, когда я случайно отключился от сервера.

Я обнаруживаю отключение с помощью команды

api.socket.on('disconnect',disconnect)

, где отключение - это моя функция обратного вызова где я переподключаюсь:

def disconnect():
    FLAG=False
    while not FLAG:
    try :
        api=fxcmpy.fxcmpy(access_token=API_ACCESS_TOKEN,log_level='error',server='demo')
        api.subscribe_market_data(symbol,(automated_strategy,))
        FLAG=True
    except:
        print('be patient')
        time.sleep(60)
        FLAG=False

Начиная с новой версии я получаю либо «ServerError: Не удается подключиться к серверу FXCM». или сообщение «очередь пакетов пуста, прерывание».

Если я перезапущу консоль python, я могу перезапустить сценарий до следующего отключения. Я пробовал это на Windows 10, Raspbian и android: одинаковая проблема во всех случаях.

Я обновил python -socketio и python -engineio до последней версии: без изменений .

Я ищу способ перезапустить клиент, когда у меня возникают проблемы с отключением. У кого-то есть такая же проблема / ключ к ее решению?

Спасибо

1 Ответ

0 голосов
/ 13 апреля 2020

это заняло у меня некоторое время, но я наконец нашел обходной путь. Идея состоит в том, чтобы полностью сбросить библиотеку fxcmpy: удалите ее и затем импортируйте снова.

Вот как я это делаю (код все еще не оптимизирован, вы можете улучшить его, но идея здесь):

while not FLAG:
    try :
        import sys
        a_del=[]
        for module in sys.modules.keys():
            if 'fxcm' in module:
                a_del.append(module)

        for module in a_del:
            del sys.modules[module]

        del fxcmpy

    except:
        print('error in reinitialization')
    try:
        del api
    except:
        print('could not delete api')

    try :
        import fxcmpy
        api=fxcmpy.fxcmpy(access_token=API_ACCESS_TOKEN,log_level='error',server='demo')
        api.subscribe_market_data(symbol,(automated_strategy,))

        FLAG=True
    except:
        print('try again')
        time.sleep(10)
        FLAG=False

это должно сделать это (адаптируйте, конечно, ваше имя объекта API и имя функции автоматической стратегии).

...