Я пытаюсь использовать библиотеку Websocket для запуска сервера websocket в другом потоке.
То, как я это делаю, кажется далеко не идеальным.
Мне нужен сервер websocket в другом поток, потому что мне нужно работать в функции main
ниже, поэтому вызовы asyncio не могут блокировать мой основной l oop.
В настоящее время у меня есть:
def serve_websocket(server, event_loop):
print(f'Websocket server listening on port {WEBSOCKET_PORT}')
event_loop.run_until_complete(server)
event_loop.run_forever()
def main():
event_loop = asyncio.get_event_loop()
ws_server = websockets.serve(msg_handler.ws_callback, LOCALHOST, WEBSOCKET_PORT)
try:
threading.Thread(target=serve_websocket, args=(ws_server, event_loop), daemon=True).start()
while True:
# Do my work here, passing data from websocket via queues
except:
print('Exit called')
Есть ли способ избежать передачи текущего события l oop в качестве аргумента другому потоку или это приемлемый способ?
Похоже, с таким именем, как asyncio
, я должен иметь возможность прослушивать сервер websocket без блокировки.