Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
正确关闭python上的websocket_Python_Websocket_Python Asyncio - Fatal编程技术网

正确关闭python上的websocket

正确关闭python上的websocket,python,websocket,python-asyncio,Python,Websocket,Python Asyncio,我正在使用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._

我正在使用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...")
现在我想彻底停止这台服务器,但似乎我遗漏了什么。从文档中,他们指出要关闭服务器,我唯一要做的就是使用类似这样的东西这是自定义线程类中的一个函数,名为From main thread:

def stop(self):
    self._server.ws_server.close()
    self._server.ws_server.wait_closed();
但是最后的结果。。。文本从不打印

我是不是误解了文件内容


干杯。

好吧,在玩了一点之后,我完成了一个干净的安装,使用以下方法:

async def _internalStop(self):
    self._server.ws_server.close()
    await self._server.ws_server.wait_closed()
    self._eventLoop.stop();
    while(self._eventLoop.is_running()):
        time.sleep(0.5)
    self._eventLoop.close();
    self._eventLoop=None;

在玩了一点之后,我完成了一个干净的安装,使用以下方法:

async def _internalStop(self):
    self._server.ws_server.close()
    await self._server.ws_server.wait_closed()
    self._eventLoop.stop();
    while(self._eventLoop.is_running()):
        time.sleep(0.5)
    self._eventLoop.close();
    self._eventLoop=None;

由于wait_closed是一个协同程序,您需要等待它或使用run_until_complete让它运行它的进程。不知道这是一个协同程序,无论如何这不是循环没有结束的原因。因为wait_closed是一个协同程序,您需要等待它或使用run_until_complete让它运行它的进程。不知道这是一个协同程序,无论如何,这不是循环没有结束的原因。