2012-07-26 4 views
10

Solo cercando di usare le funzioni asincrone di Tornado - Voglio invocare un metodo dal mio gestore ma continua a dirmi che "ha ottenuto un argomento di parole chiave inaspettato 'callback'".usando gen.task con Tornado per una semplice funzione

class MyHandler(tornado.web.RequestHandler): 

    @asynchronous 
    @gen.engine 
    def get(self): 
     response = yield gen.Task(self.dosomething, 'argument') 
     self.write(response) 
     self.finish() 

    def dosomething(self, myargument): 
     pass 

risposta

20

La funzione di non blocco richiede la richiamata, dove passa il risultato.

class MyHandler(tornado.web.RequestHandler): 

    @asynchronous 
    @gen.engine 
    def get(self): 
     response = yield gen.Task(self.dosomething, 'argument') 
     self.write(response) 
     self.finish() 

    def dosomething(self, myargument, callback): 
     return callback(myargument) 
+0

Grazie! Vorrei che il messaggio di errore indicasse che mancava, non che ha trovato un "callback". Saluti :) –

+0

Ciao, mi piacerebbe sapere come hai effettivamente fatto il dosomething come non-bloccante? Hai implementato alcun meccanismo di threading/altri in modo che non blocchi? – giga