Как запустить asyn c run_forever в другом потоке? - PullRequest
0 голосов
/ 05 мая 2020

Я пытаюсь использовать библиотеку 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 без блокировки.

...