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()

Ответы (0 шт):