L'exécution d'une async tâche en arrière-plan dans la Tornade

La lecture de la Tornade de la documentation, il est très clair comment appeler une fonction async pour retourner une réponse:

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

Ce qui manque, c'est comment un appel sera fait de manière asynchrone à une tâche de fond qui n'a pas de pertinence à la demande actuelle:

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

Ce code devrait fonctionner, sauf qu'il fonctionne de manière synchrone et la demande attend jusqu'à ce qu'il soit fini.

Quel est le droit façon asynchrone appel de cette tâche, tout juste de retour à la demande actuelle?

InformationsquelleAutor Yuval Adam | 2014-02-27