这是您所描述内容的基本版本。为了避免阻塞,您可以通过回调函数将生成器传递给IOLoop。这里的技巧是因为您没有使用执行实际IO的进程,因此没有os级别的进程/文件处理程序可通过来添加到IOLoop中
add_handler,您可以使用简单的
add_callback调用并从回调函数中反复调用它来保持IOLoop回调队列中的函数,直到生成器完成为止。
import tornado.httpserverimport tornado.ioloopimport tornado.webclass TextHandler(tornado.web.RequestHandler): @tornado.web.asynchronous def get(self): self.generator = self.generate_text(1000) tornado.ioloop.IOLoop.instance().add_callback(self.loop) def loop(self): try: text = self.generator.next() self.write(text) tornado.ioloop.IOLoop.instance().add_callback(self.loop) except StopIteration: self.finish() def generate_text(self, n): for x in xrange(n): if not x % 15: yield "FizzBuzzn" elif not x % 5: yield "Buzzn" elif not x % 3: yield "Fizzn" else: yield "%sn" % xapplication = tornado.web.Application([ (r"/text/", TextHandler),])http_server = tornado.httpserver.HTTPServer(application)http_server.listen(8888)tornado.ioloop.IOLoop.instance().start()
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)