3 Stimmen

von Tornado- und Blockiercode

Ich versuche, für einen Webdienst, an dem ich arbeite, von CherryPy wegzukommen, und eine Alternative, die ich in Betracht ziehe, ist Tornado. Die meisten meiner Anfragen sehen am Backend so aus wie:

  • POST-Daten abrufen

  • sehen, ob ich sie im Cache habe (Datenbankzugriff)

  • wenn nicht mehrere HTTP-Anfragen an einen anderen Webdienst gestellt werden, was je nach Anzahl der Anfragen sogar einige Sekunden dauern kann

Ich höre immer wieder, dass man die Tornado-Hauptschleife nicht blockieren sollte; ich frage mich, ob der gesamte obige Code in der post() Methode eines RequestHandler Bedeutet dies, dass ich den Code blockiere? Und wenn ja, was ist der geeignete Ansatz, um Tornado mit den oben genannten Anforderungen zu verwenden.

1voto

Schildmeijer Punkte 20362

Tornado wird mit einer asynchronen (eigentlich zwei iirc) http-Client ( AsyncHTTPClient ). Verwenden Sie diese, wenn Sie zusätzliche http-Anfragen stellen müssen.

Die Datenbankabfrage sollte auch über einen asynchronen Client erfolgen, um den Tornado ioloop/mainloop nicht zu blockieren. Ich weiß, dass es eine Reihe von maßgeschneiderten Datenbank-Clients für Tornado gibt (z.B. redis , mongodb ) da draußen. Die mysql lib ist in der Tornado-Distribution enthalten.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X