ich derzeit Generatoren als eine schnelle Art und Weise bin mit dem Fortschritt der langen Prozesse zu bekommen und ich frage mich, wie es in der Regel getan, wie ich es nicht sehr elegant finden ...Nutzung von Generatoren als Progression Notifier
Lassen Sie mich zuerst erklären, ich habe ein Modul Engine.py, die einige Videoverarbeitung (Segmentierung, bg/fg Subtraktion, usw.), die viel Zeit (von Sekunden bis zu einigen Minuten) dauert.
Ich verwende dieses Modul von einer GUI in WXPYTHON und einem Konsolenskript geschrieben. Als ich sah, wie man Fortschrittdialoge in wxpython implementiert, sah ich, dass ich irgendwie einen Fortschrittswert bekommen muss, um meinen Dialog zu aktualisieren, was pure Logik ist ... Also entschied ich mich, die Anzahl der verarbeiteten Frames zu verwenden In meinen Motorfunktionen, erhalte alle 33 Frames die aktuelle Frame-Nummer und gib keine aus, wenn die Verarbeitung abgeschlossen ist.
durch das hier zu tun ist, wie es aussieht:
dlg = wx.ProgressDialog("Movie processing", "Movie is being written...",
maximum = self.engine.endProcessingFrame,self.engine.startProcessingFrame,
parent=self,
style = wx.PD_APP_MODAL | wx.PD_ELAPSED_TIME | wx.PD_SMOOTH | wx.PD_CAN_ABORT)
state = self.engine.processMovie()
f = state.next()
while f != None:
c, s = dlg.Update(f, "Processing frame %d"%f)
if not c:break
f = state.next()
dlg.Destroy()
die sehr gut funktioniert, gibt es absolut keine spürbaren Geschwindigkeitsverlust, aber ich möchte in der Lage sein processMovie() Funktion aufrufen, ohne beschäftigen zu mit Generatoren, wenn ich nicht will.
Zum Beispiel mein Konsole Skript, das das Modul verwendet, kümmert sich nicht um den Fortschritt, ich könnte es verwenden, aber es ist bestimmt, in einer Umgebung ausgeführt zu werden, in der es keine Anzeige gibt, also interessiert mich wirklich nicht Fortschritt ...
Wer mit einem anderen Design, das ich kam? (Unter Verwendung von Fäden, Globals, Prozesse, etc.)
Es muss ein Design irgendwo sein, dass sich dieser Job Cleany Ich denke :-)
Gott ich liebe die eingebaute Syntax !! wusste es nicht, macht es so viel sauberer für meine Augen :-) Danke !! – attwad