Ich versuche, eine Funktion zu implementieren, die als Twisted-Client fungiert. Es heißt Code, über den ich keine Kontrolle habe. Ich habe versucht, so etwas wie (das aus dem pbsimpleclient.py Beispielcode genommen):verdrehter Client-Aufruf von einer Bibliotheksfunktion
# Copyright (c) Twisted Matrix Laboratories.
# See LICENSE for details.
from twisted.spread import pb
from twisted.internet import reactor
from twisted.python import util
def remcall(**kw):
factory = pb.PBClientFactory()
reactor.connectTCP("localhost", 8789, factory)
d = factory.getRootObject()
# kw here is what's passed in via remcall
d.addCallback(lambda object: object.callRemote("echo", kw))
d.addCallback(lambda echo: 'server echoed: '+repr(echo))
d.addErrback(lambda reason: 'error: '+str(reason.value))
d.addCallback(util.println)
d.addCallback(lambda _: reactor.stop())
reactor.run()
Und der Anrufer würde ein Anruf wie machen:
remcall(hello=1, world=2)
remcall(hi=3, there=4)
Aber wie Sie schon erraten kann, gibt es eine " twisted.internet.error.ReactorNotRestartable "Fehler.
Was ist der beste Weg, dies zu tun? Ich bin nicht so besorgt um eine Antwort von der Remote-Ende, aber ich sollte wissen, ob es scheitert und warum.
Sie starten/stoppen nicht, der Reaktor in der Funktion. Sie starten es am Ende Ihrer Hauptfunktion und stoppen es, wenn Sie das Programm beenden wollen. Einmal. –
Aber gibt es eine Möglichkeit, es laufen zu lassen (vielleicht in einem Thread) und lassen Sie den Haupt-Thread zum Anrufer zurückkehren? Oder ist das etwas, das mit Twisted nicht gemacht werden kann? – mlv