2012-06-20 3 views
16

Gibt es einen entsprechenden Befehl in Tornado für Verzögerungsfunktion ohne den Hauptprozess (also die Rückrufe sogar würde ausgeführt werden, wenn der Haupt-Thread einen neuen Funktionsaufruf wird dealying) schlafen beeinflussenTornado Äquivalent Verzögerungs

+0

Nicht ganz sicher werden genau das, was Sie fragen. Kannst du ein Beispiel geben? –

Antwort

28

Diese Versuchen:

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

entnommen von here.

+0

vielen dank ... – Gaurav

5

Mai

I Rückruf Stil mögen

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

Beachten Sie, dass seit 4.1 haben sie hinzugefügt, um eine gen.sleep(delay) Verfahren überflüssig.

so

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

würde

yield gen.sleep(5)