Frage

Für Operationen in meinem Tornado-Server, der auf Block zu erwarten sind (und nicht leicht modifiziert werden kann Dinge wie Tornados asynchroner HTTP-Request-Client zu verwenden), habe ich ausgelagert, die Arbeit zu getrennten Arbeitsprozessen mit dem multiprocessing Modul. Insbesondere war ich ein Multiprozessing Pool verwenden, da es eine Methode namens apply_async bietet, die sehr gut mit Tornado arbeitet, da es einen Rückruf als eines ihrer Argumente annimmt.

Ich erkannte vor kurzem, dass ein Pool zuweist die Anzahl der Prozesse, so dass, wenn sie alle blockiert werden, Operationen, die ein neues Verfahren erfordern wird warten müssen. Ich erkennen, dass der Server immer noch Verbindungen seit apply_async Arbeiten nehmen können Dinge zu einer Task-Warteschlange hinzufügen und ist eher sofort beendet, selbst, aber ich bin auf der Suche nach Laich n Prozesse für n Menge blockieren Aufgaben muss ich durchführen.

Ich dachte, dass ich die add_handler Methode für meinen Tornado-Server IOLoop verwenden könnte einen Handler für jede neue PID hinzufügen, dass ich zu, dass IOLoop erstellen. Ich habe getan, etwas ähnliches vor, aber es wurde mit popen und einem beliebigen Befehl. Ein Beispiel einer solchen Anwendung dieses Verfahrens ist

Andere Tipps

Dieses Projekt Check out:

https://github.com/vukasin/tornado-subprocess

ermöglicht es Ihnen, beliebige Prozesse von Tornado zu starten und einen Rückruf erhalten, wenn sie (mit Zugang zu ihrem Status, stdout und stderr) beenden.

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