Запуск веб-сокета в функции (Binance Websocket) - PullRequest
0 голосов
/ 13 апреля 2020

Я работаю с binance websocket. Сработало хорошо, если команда пуска / остановки находится в основной программе. Теперь я хотел запустить и остановить сокет через GUI. Поэтому я поместил команду start / stop в функцию. Но это не работает. Просто нет реакции при вызове функции. Любая идея, в чем проблема?

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

    def start_websocket(conn_key):

        bm.start()


    def stop_websocket(conn_key):

        bm.close()


    def process_message(msg):

        currentValues['text']= msg['p']

    # --- main ---

    PUBLIC = '************************'
    SECRET = '************************'

    client = Client(api_key=PUBLIC, api_secret=SECRET)
    bm = BinanceSocketManager(client)
    conn_key = bm.start_trade_socket('BNBBTC', process_message)

    # create main window and set its title
    root = tk.Tk()
    root.title('Websocket')

    # create variable for displayed time and use it with Label
    label = tk.Label(root)
    label.grid(column=5, row=0)
    #root.geometry('500x500')
    bt_start_socket = tk.Button(root, text="Start Websocket", command=start_websocket(conn_key))
    bt_start_socket.grid (column=1, row=1)

    bt_stop_socket = tk.Button(root, text="Sop Websocket", command=stop_websocket(conn_key))
    bt_stop_socket.grid (column=1, row=10)

Ответы [ 2 ]

0 голосов
/ 02 мая 2020

Я рекомендую не использовать глобальные переменные.

Я знаю, что это не тот ответ, который вы просили, но вы можете использовать unicorn-binance-websocket-api для python, для которого уже есть готовые методы: https://github.com/oliver-zehentleitner/unicorn-binance-websocket-api

запуск потока: https://oliver-zehentleitner.github.io/unicorn-binance-websocket-api/unicorn_binance_websocket_api.html#unicorn_binance_websocket_api .unicorn_binance_websocket_api_manager.BinanceWebSocketApiManager.create_stream

остановка потока: https://oliver-zehentleitner.github.io/unicorn-binance-websocket-api/unicorn_binance_websocket_api.html#unicorn_binance_websocket_api .unicorn_binance_websocket_streamin_Wain.anager.ager

Библиотека предлагает множество примеров и проста в освоении: https://github.com/oliver-zehentleitner/unicorn-binance-websocket-api/blob/master/example_stream_management_extended.py

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

Я понял, как это сделать. Команда пуска и останова должна быть в одной функции. Функция вызывается с параметром для запуска или остановки. Интересно, что conn_key должен быть глобальным. В противном случае новый Websocket открывается, если функция вызывается снова для закрытия. Как я уже говорил ранее: я новичок в python. Таким образом, нет гарантии, что это лучший способ сделать это. Это просто сработало; -)

def start_stop_websocket(switch):

global conn_key

if switch == 'on':
    bm.start()
    print('started')

if switch == 'off':
    bm.stop_socket(conn_key)
    bm.close()
    print('stoped')
...