Проблема в том, что вы сначала запустили фоновый поток, а затем попытались использовать его (вместо этого, как правило, сначала настройте объекты, а затем запустите поток).Другая проблема заключается в том, что вы не вызываете run_until_complete
, как в примере.
Итак, чтобы исправить:
(1) исправьте функцию start_loop
в соответствии с примером websockets, поэтому код становится
def start_loop(loop, server):
loop.run_until_complete(server)
loop.run_forever()
(2) настройте объект сервера перед запуском фонового потока:
new_loop = asyncio.new_event_loop()
start_server = websockets.serve(hello, server_host, server_port, loop=new_loop)
t = Thread(target=start_loop, args=(new_loop, start_server))
t.start()
Наконец, прежде чем пытаться подключиться к серверу, нужно немного поспать, чтобы разрешить серверучтобы начать слушать (в идеале у вас был бы лучший механизм синхронизации для этого, но большую часть времени работал бы короткий сон):
print("Server launched")
# give some time for server to start, before we try to connect
time.sleep(2)