Ich mache eine Web-Anwendung mit Python + Tornado, die im Grunde Dateien an Benutzer dient. Ich habe keine Datenbank.Tornado Async Aufruf an eine Funktion
Die Dateien werden entweder direkt abgeholt und bedient, wenn sie verfügbar sind, oder spontan generiert, wenn nicht.
Ich möchte, dass die Clients in einer asynchronen Weise bedient werden, weil einige Dateien möglicherweise bereits verfügbar sind, während andere generiert werden müssen (also müssen sie warten, und ich möchte nicht, dass sie andere Benutzer blockieren).
Ich habe eine Klasse, die die Kommissionierung oder Generierung von Dateien verwaltet, und ich muss nur von Tornado anrufen.
Was ist der beste Weg (am effizientesten auf CPU und RAM), um das zu erreichen? Soll ich einen Thread verwenden? Ein Unterprozess? Eine einfache gen.Task like this one?
Außerdem möchte ich, dass meine Implementierung in Google App Engines funktioniert (ich denke, sie erlauben nicht, dass Unterprozesse erzeugt werden?).
Ich bin relativ neu in der async Web-Service, so dass jede Hilfe willkommen ist. Das genTask Beispiel ist in der Tat der beste Weg, einen Asynchron-Aufruf zu implementieren, und es ist aufgrund der Tatsache, dass das Beispiel eines Python Koroutine zu verwenden ist, die ich didn‘:
Die gen.Task wird gut funktionieren. Wenn Ihr Code zum Abrufen/Erzeugen von Dateien nicht gut wiedergegeben werden kann, funktioniert ein Thread einwandfrei. Sie können auch mehrere Prozesse generieren, aber ich kenne die Einschränkungen für Google App Engine nicht. – sean
Danke für die Antwort. Weißt du auch wie es klappen wird wenn ich mehrere gen.Task spawne? Ich meine, meine ** Instanzmethode ** kann ziemlich CPU- und zeitaufwendig sein, wenn diese Methode mehrmals von mehreren Benutzern aufgerufen wird, was wird passieren?Laufen alle Methoden parallel async oder warten die nächsten Methoden auf die vorherigen? (Beachten Sie, dass ich eine einzelne Instanz meiner Klasse verwende, die ich während meiner gesamten Anwendung verwende) – gaborous
Völlig ausgeblendet, sollte es in Ordnung sein, aber unabhängig von Ihrer Lösung würde es ein Problem mit vielen Threads unabhängig davon werden. Wenn dies ein Problem ist, sollten Sie versuchen, in separate Prozesse aufzuteilen oder mehrere Instanzen hinter einer Lastverteilung auszuführen. – sean