【发布时间】:2018-04-16 00:28:28
【问题描述】:
我在 python 上使用 websockets 库在自定义线程中创建 websockets 服务器:
loop = asyncio.new_event_loop()
asyncio.set_event_loop(loop)
async def listener(websocket, path):
async for message in websocket:
self.onMessage.emit(message)
self._server=websockets.serve(listener, 'localhost', 8765)
asyncio.get_event_loop().run_until_complete(self._server)
asyncio.get_event_loop().run_forever()
print("Finished...")
现在我想彻底停止此服务器,但似乎我遗漏了一些东西。从文档中,他们声明要关闭服务器,我唯一要做的就是使用这样的东西(这是从主线程调用的自定义线程类中的一个函数):
def stop(self):
self._server.ws_server.close()
self._server.ws_server.wait_closed();
但永远不会打印“完成...”文本。
我误解了文档还是什么?
干杯。
【问题讨论】:
-
由于
wait_closed是协程,您需要await或使用run_until_complete让它运行。 -
没有注意到它是一个协程,无论如何这不是循环没有结束的原因。
标签: python websocket python-asyncio