2012-06-20 15 views
16

¿Hay un comando equivalente de tornado para la función de retardo sin afectar el proceso principal para dormir (por lo tanto las devoluciones de llamada ejecutarían incluso cuando el hilo principal se dealying una nueva llamada de función)tornado equivalente de retardo

+0

No del todo seguro de lo que estás pidiendo. ¿Podría dar un ejemplo? –

Respuesta

28

Prueba esto:

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

Tomado de here.

+0

grandes gracias ... – Gaurav

5

pueden ser redundantes

Me gusta el estilo de devolución de llamada

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

Nota que desde 4.1 han añadido un método gen.sleep(delay).

por lo

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

habría pasado a ser

yield gen.sleep(5)