0
我試圖製作一個使用Tornado的非阻塞TCP服務器。Tornado框架中的IOLoop.instance.start()阻止了執行
所以我子類TCPServer
作爲API規定和實施handle_stream
但是,當執行到達IOLoop.current().start()
不會進行更多。 在所有的例子中,我看到這是TCPServer
的工作原理。
我認爲我完全不瞭解這項技術。我錯過了什麼?爲什麼IOLoop.instance().stop()
永遠不會到達?
import logging
import tornado
from tornado import gen
from tornado.tcpserver import TCPServer
from tornado.ioloop import IOLoop
from tornado.netutil import bind_sockets
class CashDeskTCPServer(TCPServer):
@gen.coroutine
def handle_stream(self, stream, address):
self._stream = stream
self._read_line()
@gen.coroutine
def _read_line(self):
self._stream.read_until('\n', self._handle_read)
@gen.coroutine
def _handle_read(self, data):
self._stream.write(data)
self._read_line()
if __name__ == '__main__':
sockets = bind_sockets(8889)
tornado.process.fork_processes(0)
server = CashDeskTCPServer()
server.add_sockets(sockets)
IOLoop.instance().start()
IOLoop.instance().stop()
如果我不想用'fork_processes'?我應該在'coroutine'內使用'yield'嗎? – k4ppa