Ftp Can';t退出异步进程

Ftp Can';t退出异步进程,ftp,python-asyncio,Ftp,Python Asyncio,我在退出由asyncio处理的异步进程时遇到问题。这是ftp服务器+客户端项目,我想在“exit”命令后终止客户端进程 此代码最重要的部分如下所示: class FtpCommandsReceiver: def __init__(self, loop, sock): self.loop = loop self.sock = sock self.loop.create_task(self.recieve_data()) sel

我在退出由asyncio处理的异步进程时遇到问题。这是ftp服务器+客户端项目,我想在“exit”命令后终止客户端进程

此代码最重要的部分如下所示:

class FtpCommandsReceiver:
    def __init__(self, loop, sock):
        self.loop = loop
        self.sock = sock
        self.loop.create_task(self.recieve_data())
        self.commands_to_handle = {
                                        'exit': self.exit_handler
                                  }

    async def recieve_data(self):
        while True:
            self.data_to_send = input('ftp> ')
            if self.data_to_send == '':
                continue
            await self.loop.sock_sendall(self.sock, self.data_to_send.encode())
            try:
                await self.commands_to_handle.get(self.data_to_send)()
            except TypeError:
                pass
            self.received_data = await self.loop.sock_recv(self.sock, 10000)
            print(self.received_data.decode())
            if not self.received_data:
                break
        print('Connection closed by the server')
        self.sock.close()

    async def exit_handler(self):
        self.loop.stop()
        self.loop.close()

if __name__ == '__main__':
    loop = asyncio.get_event_loop()
    FTP_connection = FtpConnection(loop)
    task = loop.create_task(FTP_connection.connect())
    try:
        loop.run_forever()
    finally:
        loop.close()
当调用exit\u handler方法时,异常会引发:

从未检索到任务异常
future:exception=RuntimeError('无法关闭正在运行的事件循环',)> 回溯(最近一次呼叫最后一次):
文件“/usr/lib/python3.5/asyncio/tasks.py”,第239行,步骤 结果=coro.send(无)
接收数据中第54行的文件“FTPclient.py” 等待self.commands到handle.get(self.data到send)(
文件“FTPclient.py”,第66行,在出口处理程序中 self.loop.close()
文件“/usr/lib/python3.5/asyncio/unix_events.py”,第56行,关闭 super().close()
文件“/usr/lib/python3.5/asyncio/selector_events.py”,第94行,关闭 raise RUNTIMERROR(“无法关闭正在运行的事件循环”)
RuntimeError:无法关闭正在运行的事件循环


我将感谢您的帮助,并提前向您表示感谢

为什么要在退出处理程序中关闭事件循环?只需调用<代码>停止/代码>并将其保留到顶层的代码以关闭循环。在您的建议之后,我的FTP客户端程序正确退出,但在新进程中我无法从套接字接收服务器的任何数据。请考虑将代码减少到演示问题的最小可运行示例。仅仅根据描述很难说会发生什么。