竜巻でTCPClientとTCPServerを取得できません。Tornadoとの非同期TCPClientとTCPServer
私は、次のサーバーのコードを持っている:
from tornado import gen
from tornado.ioloop import IOLoop
from tornado.iostream import IOStream, StreamClosedError
from tornado.tcpclient import TCPClient
from tornado.tcpserver import TCPServer
from tornado.platform.asyncio import to_tornado_future, to_asyncio_future
class MyServer(TCPServer):
async def handle_stream(self, stream, address):
try:
while True:
encoded="***".encode()
msg= await stream.read_until(encoded)
print(msg)
except StreamClosedError:
print("connection error")
server = MyServer()
server.listen(10000)
IOLoop.current().start()
と、次のクライアントコード:
from tornado import gen
from tornado.ioloop import IOLoop
from tornado.iostream import IOStream, StreamClosedError
from tornado.tcpclient import TCPClient
from tornado.platform.asyncio import to_tornado_future, to_asyncio_future
tcp_client = TCPClient()
async def client():
while True:
try:
stream = await tcp_client.connect('localhost', 10000)
# Set TCP_NODELAY/disable Nagle's Algorithm.
stream.set_nodelay(True)
while True:
msg ="hello ***"
await stream.write(msg.encode())
await gen.sleep(5)
except StreamClosedError as exc:
print("error connecting")
loop = IOLoop.current()
loop.spawn_callback(client)
loop.start()
私はhandle_streamが待たれなかったことを、サーバー側の警告を得続ける:
/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/tornado-4.4.2-py3.5-macosx-10.6-intel.egg/tornado/netutil.py:272: RuntimeWarning: coroutine 'MyServer.handle_stream' was never awaited
callback(connection, address)
ERROR:tornado.application:Error in connection callback
Traceback (most recent call last):
File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/tornado-4.4.2-py3.5-macosx-10.6-intel.egg/tornado/tcpserver.py", line 276, in _handle_connection
self.io_loop.add_future(future, lambda f: f.result())
File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/tornado-4.4.2-py3.5-macosx-10.6-intel.egg/tornado/ioloop.py", line 593, in add_future
誰かが私が間違っていることを教えてもらえますか、この仕事をどうやって得ることができますか? g asyncと待ちます。
これは、ジェシーが親切に答えたことを、次の質問に関連している:私は上記を変更した場合、私は....彼のコードは、非同期での作業を取得しようとしたが、同じ問題を抱えて待つ
Tornado TCP Server/Client process communication
歩留まりとコルーチンを使用するコード...
どのバージョンのTornado? 'TCPServer.handle_stream'はバージョン4.2まではコルーチンではありませんでした。 –
こんにちはベン私は最新バージョンのtornado-4.4.2を実行しています。私は例外を追加しました。私はちょうどそれを取得しています... –