Python WebSocket клиент и threading
неравнодушные, филантропы и энтузиасты...
Вводная. Есть веб-сервер (он на своей стороне принимает и подключает клиента на вебсокет). Я хочу делать send на сервер при событиях на стороне клиента.
Что сделал. Скрипт на питоне, который в одном потоке держит соединение с сервером и ждет данные, во втором потоке в фоне слушает нажатия на клавиатуре, ну и третий поток просто окошко, не даст забыть о запущенной программе.
Проблема. Не могу сообразить как отправить событие на сервер в контексте send(наверно). Не получается между потоками передать через Queue, так еще и метод get() блокирующий...
Памаааагите......
import keyboard
from tkinter import *
import threading
import websocket
import queue
q = queue.Queue()
def print_pressed_keys(e):
print(e, e.event_type, e.name)
q.put_nowait(e.name)
def ppp():
keyboard.hook(print_pressed_keys)
keyboard.wait()
def main_loop():
window = Tk()
window.title("Добро пожаловать в приложение PythonRu")
lbl = Label(window, text="Идет захват клавиатуры...")
lbl['bg'] = "red"
lbl.grid(column=0, row=0)
window.mainloop()
def on_message(ws, message):
print(message)
def create_connection():
websocket.enableTrace(True)
ws = websocket.WebSocketApp("ws://192.168.88.116:88", on_message=on_message)
ws.send(q.get_nowait())
ws.run_forever()
thread_1 = threading.Thread(target=ppp, name="hook", daemon=True)
thread_2 = threading.Thread(target=main_loop, name="tkinter", daemon=True)
thread_3 = threading.Thread(target=create_connection, name="connection", daemon=True)
thread_1.start()
thread_2.start()
thread_3.start()
thread_2.join()