Есть ли эквивалентная команда в торнадо для функции задержки, не затрагивая основной процесс для сна (таким образом, обратные вызовы будут выполняться, даже если основной поток выполняет новый вызов функции)
Эквивалент задержки торнадо
Ответ 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()