Frage

Ich habe Schwierigkeiten, das gleiche Verhalten in Web-Service-Code zu erstellen, der aufgeschobene Objekte wie im Code verwendet, der nicht ist. Mein Ziel ist es, einen Dekorateur zu schreiben, der die Verarbeitung von Verarbeitung von jedem Verfahren (der von verdreht entkoppelt ist, an den verdrehten Fadenbecken delegiert wird, so dass der Reaktor nicht blockiert ist, ohne die Semantik dieser Methode zu ändern.

Wenn eine Instanz von Klassenecho unten als Webdienst ausgesetzt ist, ist dieser Code: generasacodicetagpre.

zeigt ein HTML-Dokument an den Browser an, wenn alle Erhöhungsaussagen ausgerechnet werden, und zeigt eine schön formatierte Stapel-Trace (die für mich verdreht ist), wenn die Anweisung "E5" aufgenommen wird. Das ist was ich will. Wenn ich auch keine verschobenen Objekte verwenden und das gesamte Verhalten von Callback1 und Callback2 in Render_GET () einsetzen kann, erzeugt eine in Render_GET erhebliche Ausnahme die gewünschte Stapelspur.

Ich versuche, Code zu schreiben, der sofort auf den Browser reagiert, nicht dazu führen, dass Ressourcen-Lecks in Twisted angezeigt werden, und verursachen, dass der Browser-Stack-Trace auch in den Fällen angezeigt wird, in denen eine der Erhöhungsanweisungen "E1" bis "E3" angezeigt wird. ist im latenten Code enthalten - obwohl ich natürlich verstehe, dass der Stapel selbst unterschiedlich ist. (Der "E4" -Kornfall ist mir nicht so viel.) Nachdem ich die verdrehte Dokumentation und andere Fragen auf dieser Website gelesen habe, bin ich unsicher, wie ich dies erreichen kann. Ich hätte gedacht, dass das Hinzufügen eines Errbacks dies erleichtern sollte, aber offenbar nicht. Es muss etwas über aufgeschobene Objekte und den Twisted.Web-Stack geben, den ich nicht verstehen kann.

Die Auswirkungen auf das Protokollierung I-Dokument Hier können hier von meiner Verwendung des PythonLoggingobServers beeinflusst werden, um die verdrehte Protokollierung an das Standard-Protokollierungsmodul zu überbrücken.

Wenn "E1" inklusive ist, wartet der Browser, bis der Reaktor heruntergefahren ist. An diesem Punkt ist der Wert der Wertentrür mit Stack-Trace protokolliert und der Browser ein leeres Dokument empfängt.

Wenn "E2" inklusive ist, wird die Wertenterror-Ausnahme mit Stack-Trace sofort protokolliert, der Browser wartet jedoch, bis der Reaktor herunterfährt, an dem der Punkt ein leeres Dokument empfängt.

Wenn "E3" inklusive ist, wird die ValueError-Ausnahme mit Stack-Trace sofort protokolliert, der Browser wartet, bis der Reaktor herunterfährt, und empfängt an diesem Punkt das beabsichtigte Dokument.

Wenn die Anweisung "E4" eingeschlossen ist, wird das vorgesehene Dokument sofort an den Browser zurückgegeben, und die Wertradausnahme mit Stack-Trace wird sofort angemeldet. (Gibt es in diesem Fall eine Möglichkeit eines Ressourcenlecks?)

War es hilfreich?

Lösung

ok, nachdem ich Ihre Frage mehrmals gelesen habe, denke ich, ich verstehe, was Sie fragen.Ich habe auch den Code überarbeitet, um etwas besser als Ihre ursprüngliche Antwort zu machen.Diese neue Antwort sollte alle Befugnisse von aufgeschobenen Zeichnen zeigen. generasacodicetagpre.

Ich empfehle auch, dass Sie den kreondo Tutorial lesen.Es wird Ihnen alles lehren, was Sie über Rückstellungen wissen müssen.

EDIT:

hat den obigen Code geändert, um einige dumme Fehler zu beheben.Verbesserte es auch.Wenn eine Ausnahme irgendwo passiert (außer in generakodicetagcode, aber wir benötigen ein gewisses Maß an Vertrauen), dann wird es an den generationspflichtigen Vertrauen übergeben, der den Fehler in Twowed logiert oder druckt.Schließen Sie die Anfrage.Dies sollte alle Ressourcenlecks anhalten.

Andere Tipps

Ich habe es herausgefunden, indem ich durch die verdrehte Quelle graben konnte. Die notwendige Erkenntnisse ist, dass der Reaktor- und Randabruf- / Errback-Kettenlogik vom Anforderungsobjekt entkoppelt ist, auf den Daten zum Browser zurückkehren. Die Errback ist notwendig, kann jedoch nicht nur den Fehlerobjekt der Kette wie im ursprünglichen Code, den ich gepostet hat, nur lediglich ausbreiten kann. Die Errampe muss den Fehler an den Browser melden.

Der untenstehende Code erfüllt meine Anforderungen (hält niemals den Browser wartet, immer den Stapel-Trace analysiert, keinen Reaktor-Neustart erfordert, um die Dinge wieder zu leiten Der Reaktor, der auf andere Ereignisse anspricht (solche Methoden werden hier im Wesentlichen an den Ort des Callbacks 1 dauern). Ich habe jedoch festgestellt, dass in dem untenstehenden Code unkommentiert die "E4" -Schrat-Anweisung sehr seltsames Verhalten auf nachfolgenden Browseranforderungen (Teildaten aus früheren Anforderungen, die an den Browser zurückgegeben wurden; Deadlock).

Hoffentlich finden andere, dass dies ein nützliches verzögertes Beispiel ist. generasacodicetagpre.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top