4 Stimmen

Verdreht: Kommunikation zwischen aufgeschobenem Unterprozess und http-Anfragen?

Hintergrund:

Ich habe einen lang laufenden Unterprozess, der verdreht abläuft. Ich habe das Prozessprotokoll so unterteilt, dass ich weiß, wann ich std out, std err usw. erhalte. Ich möchte die Fähigkeit für separate http-Anfragen (über eine Reihe von Zeit) auf den Status dieser laufenden Prozesse durch gemeinsame Variablen oder eine globale Klasse oder etwas zu überprüfen.

Frage:

Wie kann ich den Event-Listener für das Subprozessprotokoll dazu bringen, Daten für eine spätere http-Anfrage abzulegen, um sie abzuholen?

3voto

Glyph Punkte 30137

Erstellen Sie ein 'Mailbox'-Objekt; nehmen wir an, es ist eine Liste. Dies könnte ein Wörterbuch, ein Objekt, eine Datei oder eine Datenbank sein, was immer Sie wollen. Was auch immer für Ihre Anwendung geeignet ist.

Wenn Sie dann Ihre ProcessProtocol einen Verweis auf die Mailbox übergeben. Wenn relevante Daten eintreffen, self.mailbox.append(relevantData) .

Übergeben Sie außerdem einen Verweis auf dieses Objekt an Ihre HTTP-Ressource, die auf diese Anfragen antwortet. Dann, in render_GET , relevantData = self.mailbox.pop() .

Es gibt keinen magischen Weg, dies in Twisted zu tun. Es hängt von vielen verschiedenen Dingen über Ihre Anwendung ab und von der Art und Weise, wie Sie diese Daten speichern und verwalten wollen, was Twisted ist ausdrücklich nicht zuständig ist.

Die Frage, die Sie hier stellen, läuft eigentlich darauf hinaus: "Ich habe ein Objekt a (Ihr Prozessprotokoll), und ein Objekt b (Ihre HTTP-Ressource). Wie erhalte ich a um eine Methode aufzurufen b ? Diese FAQ taucht in der Twisted-Community in verschiedenen Formen immer wieder auf, aber es ist sehr schwer, eine schöne, wiederverwendbare Antwort darauf zu schreiben, weil jeder denkt, er stelle eine andere Frage.

Was Twisted tut - alle Twisted ist immer ist die Abbildung von Ereignissen außerhalb Ihres Prozesses - Daten, die von Unterprozessen oder aus dem Netz kommen - auf Methodenaufrufe in Ihrem Prozess. Wie Sie die Objekte im Inneren anordnen, wie Sie Verweise zwischen ihnen aufrechterhalten und was Sie mit den Daten tun, die Twisted Ihnen gerade gegeben hat, ist hängt ganz von Ihnen ab . Diese Architektur ist der Grund, warum Twisted so leistungsfähig ist. Wenn Sie gelernt haben, dem Callback den Fehlercode zu entreißen, wird es Zeit für Sie zu gehen :).

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