2012-06-20 18 views
16

Esiste un comando equivalente nel tornado per la funzione di ritardo senza influenzare il processo principale a dormire (e quindi i callback avrebbero eseguito anche quando il thread principale è dealying una nuova chiamata di funzione)tornado equivalente di ritardo

+0

Non del tutto sicuro di quello che stai chiedendo. Potresti fare un esempio? –

risposta

28

Prova questa:

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

Tratto da here.

+0

grazie mille ... – Gaurav

5

Può essere ridondante

Mi piace lo stile di callback

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 che, dal momento 4.1 hanno aggiunto un metodo gen.sleep(delay).

così

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

sarebbe solo diventare

yield gen.sleep(5)