想在tcp server使用ornado.gen.coroutine遇到问题,,tcp server的代


tcp server的代码如下:

#! /usr/bin/env python#coding=utf-8from tornado.tcpserver import TCPServerfrom tornado.ioloop import IOLoopfrom tornado.gen import *class TcpConnection(object):    def __init__(self,stream,address):        self._stream=stream        self._address=address        self._stream.set_close_callback(self.on_close)        self.send_messages()    @coroutine    def send_messages(self):        yield self.send_message(b'hello \n')        response1 = yield self.read_message()        print(response1)        yield self.send_message(b'world \n')        print((yield self.read_message()))    def read_message(self):        self._stream.read_until(b'\n')    def handle_message(self,data):        print(data)    def send_message(self,data):        self._stream.write(data)    def on_close(self):        print("the monitored %d has left",self._address)class MonitorServer(TCPServer):    def handle_stream(self,stream,address):        print("new connection",address,stream)        conn = TcpConnection(stream,address)if  __name__=='__main__':    print('server start .....')    server=MonitorServer()    server.listen(20000)    IOLoop.instance().start()

代码运行到yield self.send_message(b'hello \n')这一行,后面的代码就没有执行了,要怎么样才能解决这个问题啊?如果有其他类似的tcp server中使用tornado.gen.coroutine的例子,请告之我,谢谢!!

read_message 也要用 coroutine 修饰 他也是一个异步方法(要传 callback 的)

编橙之家文章,

评论关闭