Python 3.x Tornado asyncio tcp服务器抛出AttributeError:&x27_UnixSelectorEventLoop';
我正在尝试使用Tornado和Asyncio构建tcp服务器。在《Tornado》一书中,他们说Python 3.x Tornado asyncio tcp服务器抛出AttributeError:&x27_UnixSelectorEventLoop';,python-3.x,tcp,tornado,python-asyncio,Python 3.x,Tcp,Tornado,Python Asyncio,我正在尝试使用Tornado和Asyncio构建tcp服务器。在《Tornado》一书中,他们说await和async应该可以替代Tornado.gen.coroutinedecorator,但我在启动这台服务器时遇到了问题。我做错了什么 from tornado.ioloop import IOLoop from tornado.tcpserver import TCPServer from tornado.iostream import StreamClosedError from torn
await
和async
应该可以替代Tornado.gen.coroutine
decorator,但我在启动这台服务器时遇到了问题。我做错了什么
from tornado.ioloop import IOLoop
from tornado.tcpserver import TCPServer
from tornado.iostream import StreamClosedError
from tornado.platform.asyncio import to_asyncio_future
class Server(TCPServer):
async def handle_stream(self, stream, address):
"""Called when new IOStream object is ready for usage"""
print('Incoming connection from %r', address)
while True:
try:
message = await to_asyncio_future(stream.read_until('\n'.encode('utf8')))
print("Message: ", message)
except StreamClosedError:
print("Good bye!!")
break
if __name__ == "__main__":
IOLoop.configure('tornado.platform.asyncio.AsyncIOLoop')
server = Server(io_loop=IOLoop.current().asyncio_loop)
server.listen(7000)
IOLoop.current().start()
这就是错误:
Traceback (most recent call last):
File "tornadoasyncioserver.py", line 41, in <module>
server.listen(7000)
File "/Users/user/tornadotcp/venv/lib/python3.5/site-packages/tornado/tcpserver.py", line 127, in listen
self.add_sockets(sockets)
File "/Users/user/tornadotcp/venv/lib/python3.5/site-packages/tornado/tcpserver.py", line 144, in add_sockets
io_loop=self.io_loop)
File "/Users/user/tornadotcp/venv/lib/python3.5/site-packages/tornado/netutil.py", line 275, in add_accept_handler
io_loop.add_handler(sock, accept_handler, IOLoop.READ)
AttributeError: '_UnixSelectorEventLoop' object has no attribute 'add_handler'
回溯(最近一次呼叫最后一次):
文件“TornadAsyncIOServer.py”,第41行,在
服务器监听(7000)
文件“/Users/user/tornadotcp/venv/lib/python3.5/site packages/tornado/tcpserver.py”,第127行,在listen中
self.add_套接字(套接字)
文件“/Users/user/tornadotcp/venv/lib/python3.5/site packages/tornado/tcpserver.py”,第144行,在add_sockets中
io_循环=self.io_循环)
文件“/Users/user/tornadotcp/venv/lib/python3.5/site packages/tornado/netutil.py”,第275行,在add\u accept\u处理程序中
io_循环。添加_处理程序(sock、accept_处理程序、IOLoop.READ)
AttributeError:“\u UnixSelectorEventLoop”对象没有属性“add\u handler”
更改服务器(io\u loop=IOLoop.current().asyncio\u loop)
到服务器(io\u loop=IOLoop.current())
因为服务器等待IOLoop,而不是异步io循环本身。更改服务器(io\u loop=IOLoop.current().asyncio\u loop)
到服务器(io\u loop=IOLoop.current())
因为服务器等待IOLoop,不是asyncio循环本身。现在我遇到了这个错误回溯(最近一次调用):File“/Users/user/tornadotcp/venv/lib/python3.5/site packages/tornado/tcpserver.py”,第271行,在_handle\u connection self.io\u循环中。添加_future(future,lambda f:f.result())文件“/Users/user/tornadontcp/venv/lib/python3.5/site packages/tornado/ioloop.py”,第589行,在add_future assert is_future(future)AssertionError/Users/user/tornadontcp/venv/lib/python3.5/site packages/tornado/netutil.py:274:RuntimeWarning:coroutine‘Server.handle_stream’从未等待回调(连接,地址)
这似乎与这个问题有关:现在我有了这个错误回溯(最近一次调用):文件“/Users/user/tornadotcp/venv/lib/python3.5/site packages/tornado/tcpserver.py”,第271行,在_handle\u connection self.io\u循环中。添加_future(future,lambda f:f.result())文件”/Users/user/tornadotcp/venv/lib/python3.5/site packages/tornado/ioloop.py”,第589行,在add_future assert is_future(future)AssertionError/Users/user/tornadontcp/venv/lib/python3.5/site packages/tornado/netutil.py:274:RuntimeWarning:coroutine“Server.handle\u stream”从未等待回调(连接,地址)
这似乎与这个问题有关: