Dies ist so kaputt, ich hoffe, du bist barmherzig mit mir:
reactor.callLater(0, myFunction, parameter1).addCallback(reactor.stop)
reactor.run()
myFunction
gibt ein Deferred zurück.
Ich hoffe, es ist klar, was ich tun möchte:
- Sobald der Reaktor läuft, möchte ich
myFunction
aufrufen. Deshalb verwende ich 0 als Verzögerungsparameter. Gibt es keinen anderen Weg außer callLater? Es sieht komisch aus, ihm eine Verzögerung von 0 zu übergeben. - Ich möchte den Reaktor stoppen, sobald
myFunction
die Aufgabe abgeschlossen hat.
Die Probleme, die ich bisher habe:
AttributeError: Die Instanz DelayedCall hat kein Attribut 'addCallback'
. Gut so! Wie füge ich dann eine Rückruffunktion in die Rückrufkette ein, die vonmyFunction
gestartet wurde?Ausnahmefehler: stop() erwartet genau 1 Argument (2 gegeben)
.
Um das zweite Problem zu lösen, musste ich eine spezielle Funktion definieren:
def stopReactor(result):
gd.log.info( 'Ergebnis: %s' % result)
gd.log.info( 'Reaktor wird sofort gestoppt' )
reactor.stop()
Und den Code ändern zu:
reactor.callLater(0, myFunction, parameter1).addCallback(stopReactor)
reactor.run()
(funktioniert immer noch nicht wegen des callLater-Problems, aber stopReactor
wird jetzt funktionieren)
Gibt es wirklich keinen anderen Weg, reactor.stop
aufzurufen, außer indem man eine zusätzliche Funktion definiert?