Эквивалент задержки торнадо - программирование
Подтвердить что ты не робот

Эквивалент задержки торнадо

Есть ли эквивалентная команда в торнадо для функции задержки, не затрагивая основной процесс для сна (таким образом, обратные вызовы будут выполняться, даже если основной поток выполняет новый вызов функции)

4b9b3361

Ответ 1

Попробуйте следующее:

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()

Взято из здесь.

Ответ 2

Обратите внимание, что с 4.1 они добавили метод gen.sleep(delay).

так

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

просто станет

yield gen.sleep(5)

Ответ 3

Может быть избыточным

Мне нравится стиль обратного вызова

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()