Gaurav
Gaurav

Reputation: 627

tornado equivalent of delay

Is there an equivalent command in tornado for delay function without affecting the main process to sleep (thus the callbacks would execute even when the main thread is dealying a new function call)

Upvotes: 18

Views: 11966

Answers (3)

Brent Miller
Brent Miller

Reputation: 360

Note that since 4.1 they've added a gen.sleep(delay) method.

so

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

would just become

yield gen.sleep(5)

Upvotes: 21

Nikolay Fominyh
Nikolay Fominyh

Reputation: 9256

Try this:

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

Taken from here.

Upvotes: 30

flyking_
flyking_

Reputation: 161

May be redundant

I like callback style

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

Upvotes: 7

Related Questions