Документация для библиотеки показывает, что следующий код должен помочь, и он действительно работает:
start_server = websockets.serve(hello, 'localhost', 8765)
asyncio.get_event_loop().run_until_complete(start_server)
asyncio.get_event_loop().run_forever()
Но новая библиотека Python-3.7 asyncio добавил asyncio.run
, который "запускает сопрограмму pass" * и "должен использоваться в качестве основной точки входа для асинхронных программ." Более того, при просмотре документации для get_event_loop()
, использованного выше, он гласит:
Разработчикам приложений обычно следует использовать функции высокого уровня asyncio, такие как asyncio.run () ...
Я пытался использовать прогон следующими способами:
server = websockets.serve(hello, 'localhost', 8765)
asyncio.run(server)
, из которого я получаю:
ValueError: a coroutine was expected, got <websockets.server.Serve object at 0x7f80af624358>
sys:1: RuntimeWarning: coroutine 'BaseEventLoop.create_server' was never awaited
Затем я попытался обернуть сервер в Задачу, выполнив:
server = asyncio.create_task(websockets.serve(handle, 'localhost', 8765))
asyncio.run(server)
, из которого я получаю:
RuntimeError: no running event loop
sys:1: RuntimeWarning: coroutine 'BaseEventLoop.create_server' was never awaited
Из-за этого последнего предупреждения я также попытался:
async def main():
server = asyncio.create_task(websockets.serve(hello, 'localhost', 8765))
await server
asyncio.run(main())
На что я получаю то же самоеошибка.Что мне здесь не хватает?Более того, если asyncio.run не запускает рабочий цикл, что он делает?