2010-05-24 6 views
1

Je voudrais être en mesure d'exécuter certaines fonctions de nettoyage si et seulement si le client termine avec succès le téléchargement d'un fichier que je desserve en utilisant Tornado.Comment appelez-vous la fonction après que le client termine le téléchargement du serveur Web tornado?

J'ai installé l'outil d'accélérateur firefox et l'avait ralentir la connexion vers le bas à la vitesse d'accès à distance et installé ce gestionnaire pour générer un tas de texte aléatoire des déchets:

class CrapHandler(BaseHandler): 
    def get(self, token): 
     crap = ''.join(random.choice(string.ascii_uppercase + string.digits) for x in range(100000)) 
     self.write(crap) 
     print "done" 

Je reçois la sortie suivante de tornade immédiatement après avoir fait la demande:

done 
I 100524 19:45:45 web:772] 200 GET /123 (192.168.45.108) 195.10ms 

Le client continue ensuite son téléchargement pendant environ 20 secondes. Je m'attendais à ce que l'impression soit faite "après" que le client ait fini.

Aussi, si je fais ce qui suit, je reçois à peu près le même résultat:

class CrapHandler(BaseHandler): 
    @tornado.web.asynchronous 
    def get(self, token): 
     crap = ''.join(random.choice(string.ascii_uppercase + string.digits) for x in range(100000)) 
     self.write(crap) 
     self.finish() 
     print "done" 

Suis-je manque quelque chose de fondamental ici? Le tornado peut-il même supporter ce que j'essaie de faire? Sinon, existe-t-il une alternative?

Répondre

1

Je crois que vous recherchez quelque chose qui s'exécute dans la méthode de gestionnaire de requêtes on_connection_close que vous pouvez remplacer. Gardez à l'esprit que si vous exécutez nginx, tornado répondra à nginx immédiatement et nginx répondra lentement au client.

De plus, gardez à l'esprit que l'ajout de @tornado.web.asynchronous ne rend pas réellement une requête asynchrone. Il définit seulement la demande d'utiliser tornado.http.AsyncHTTPClient.

+0

Comment on_connection_close gère-t-il les keepalives http? La connexion restera-t-elle ouverte entre les demandes dans ce cas? – Shabbyrobe

Questions connexes