0

我目前正在学习 python+tornado 并且因这个问题而停止:我需要每隔几秒(例如)向客户端写入一些数据,即使使用self.write(var)
我已经尝试过:

  1. time.sleep- 被封锁了
  2. yield gen.Task(IOLoop.instance().add_timeout, time.time() + ...)- 很棒,但在超时结束时我仍然收到完整的请求
  3. .flush- 出于某种原因,它不想将 Bdata 返回给客户端
  4. .PeriodicCallback- 浏览器窗口只是像其他上层方法一样加载和加载

我想我的代码像

class MaHandler(tornado.web.RequestHandler):
    @tornado.web.asynchronous
    @tornado.gen.engine
    def get(self):
        for x in xrange(10):
            self.write(x)
            time.sleep(5) #yes,it's no working

就这样。感谢您对此的任何帮助。我正在解决这个问题,大约需要 4-5 天,我自己真的做不到。

我仍然认为它不能仅在服务器端完成。它可以被关闭。

4

1 回答 1

1

使用PeriodicCallback类。

class MyHandler(tornado.web.RequestHandler):
    @tornado.web.asynchronous
    def get(self):
        self._pcb = tornado.ioloop.PeriodicCallback(self._cb, 1000)
        self._pcb.start()

    def _cb(self):
        self.write('Kapooya, Kapooya!')
        self.flush()

    def on_connection_close(self):
        self._pcb.stop()
于 2013-04-08T20:43:53.263 回答