Tornado verarbeitet die Daten im Request-Handler nach der Rückgabe

8

Wenn ich in einem Tornado-Request-Handler die Funktion foo () aufrufen muss, die keinen Einfluss darauf hat, was an den Benutzer zurückgegeben wird, ist es sinnvoll, das Ergebnis zuerst an den Benutzer zu senden und dann foo () aufzurufen. Ist es möglich, dies einfach in Tornado (oder mit einem Paket von Drittanbietern) zu tun?

    
kefeizhou 11.03.2011, 15:21
quelle

4 Antworten

-1

Nein, es ist nicht "einfach" out-of-the-box. Worauf du dich beziehst, ist "Feuer und vergiss". Selbst wenn Sie einen Thread-Pool verwenden, um die Anfrage zu farmen, gehört dieser Thread-Pool zum Python-Hauptprozess, der zu Tornado gehört.

Der beste Ansatz ist eine Nachrichtenwarteschlange. So etwas wie Karotte. Nehmen wir an, Sie haben eine Seite, auf der Benutzer einen riesigen Bericht erstellen können. Sie können ihn in einer Nachrichtenwarteschlange starten und dann die Tornado-Anfrage abschließen. Mit einigen AJAX-Zaubern und anderen Tricks (außerhalb von Tornado) können Sie das tun Lehnen Sie sich zurück und warten Sie, bis die Nachrichtenwarteschlange ihren Job beendet hat (was technisch möglicherweise auf einem verteilten Server an einem anderen physischen Ort geschieht).

    
Peter Bengtsson 24.03.2011, 10:21
quelle
10

Es ist extrem einfach:

%Vor%     
A. Jesse Jiryu Davis 08.09.2012 19:29
quelle
5

ioloop.add_callback, Tornado führt den Rückruf in der nächsten IOLoop-Iteration durch.

    
Schildmeijer 11.03.2011 16:48
quelle
0

schlechte Ratschlag Warnung: Sie können Multiprocessing verwenden.

Ссылка

Achten Sie darauf, dass Sie alle Ihre Datenbankverbindungen (im erzeugten Code) schließen und alles tun, was Tornado sonst tun könnte, wenn es normalerweise eine Anfrage ohne einen Unterprozess abschließt. Die anderen Antworten klingen besser. Aber du kannst das tun. Tun Sie das nicht.

    
Skylar Saveland 22.04.2011 15:51
quelle

Tags und Links