2012-06-20 7 views
16

Czy istnieje odpowiednik polecenia w tornado dla funkcji opóźnienia bez wpływu na główny proces spać (stąd callbacks byłoby wykonać nawet gdy główny wątek jest dealying nowego wywołania funkcji)tornado odpowiednik opóźnienia

+0

Nie do końca pewny co pytasz. Czy mógłbyś podać przykład? –

Odpowiedz

28

Spróbuj tego:

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

Zaczerpnięte z here.

+0

wielkie dzięki ... – Gaurav

5

Może być zbędny

Lubię zwrotna styl

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

Należy pamiętać, że od 4,1 dodali metodę gen.sleep(delay).

tak

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

po prostu stać

yield gen.sleep(5)