18

在不影响主进程睡眠的情况下,tornado 中是否有等效命令用于延迟函数(因此即使主线程正在处理新函数调用,回调也会执行)

4

3 回答 3

30

试试这个:

import time
from tornado.ioloop import IOLoop
from tornado.web import RequestHandler, asynchronous
from tornado import gen

class MyHandler(RequestHandler):
    @asynchronous
    @gen.engine
    def get(self):
        self.write("sleeping .... ")
        self.flush()
        # Do nothing for 5 sec
        yield gen.Task(IOLoop.instance().add_timeout, time.time() + 5)
        self.write("I'm awake!")
        self.finish()

取自这里

于 2012-06-21T09:24:45.283 回答
21

请注意,从 4.1 开始,他们添加了一个gen.sleep(delay)方法。

所以

yield gen.Task(IOLoop.instance().add_timeout, time.time() + 5)

会变成

yield gen.sleep(5)
于 2015-02-12T01:29:54.997 回答
7

可能是多余的

我喜欢回调风格

class MyHandler(RequestHandler):
    @asynchronous
    def get(self):
        self.write("sleeping .... ")
        self.flush()
        IOLoop.instance().add_timeout(time.time() + 5, self._process)

    def _process(self)
        # Do nothing for 5 secs
        self.write("I'm awake!")
        self.finish()
于 2013-10-25T01:10:03.963 回答