Ich bin neu in Tornado.Wie erstelle ich eine nicht blockierende Funktion?
Es ist aufregend über den Teil von Coroutines.
Also versuche ich zuerst eine blockierende Funktion in eine nicht blockierende umzuwandeln.
@tornado.concurrent.return_future
def calculate(callback):
start_time = time.time()
res = urllib2.urlopen("https://www.google.com/")
print time.time()-start_time
callback(res)
class MainHandler(tornado.web.RequestHandler):
@tornado.gen.coroutine
def get(self):
start_time = time.time()
res = yield [calculate(), calculate()]
print time.time()-start_time
Aber ich habe:
1.41436505318
1.38487792015
2.80179595947
Es ist I/O Bindung also denke ich, die gesamte Zeit auf die längere Zeit eine ungefähre Angabe ausgegeben (1,41436505318) ausgegeben sollte. Aber es scheint zu blockieren.
Also ich frage mich, was schief läuft Wie kann ich eine blockierende Funktion in eine nicht blockierende Funktion konvertieren?