Die Ausführung einer asynchronen hintergrund-task in Tornado

Lesen der Tornado-Dokumentation, es ist sehr klar, wie aufrufen, eine async-Funktion zum zurückgeben einer Reaktion:

class GenAsyncHandler(RequestHandler):
    @gen.coroutine
    def get(self):
        http_client = AsyncHTTPClient()
        response = yield http_client.fetch("http://example.com")
        do_something_with_response(response)
        self.render("template.html")

Was fehlt ist, wie sollte ein Anruf gemacht werden asynchron an ein hintergrund-task, die keinen Bezug zu der aktuellen Anforderung:

class GenAsyncHandler(RequestHandler):
    @gen.coroutine
    def _background_task():
        pass  # do lots of background stuff

    @gen.coroutine
    def get(self):
        _dont_care = yield self._background_task()
        self.render("template.html")

Dieser code würde funktionieren, außer, dass es läuft synchron und die Anfrage wartet, bis es fertig ist.

Was ist der Recht Weg, um asynchron aufrufen, diese Aufgabe unter sofortiger Rücksendung der aktuellen Anfrage?

InformationsquelleAutor Yuval Adam | 2014-02-27
Schreibe einen Kommentar