Я пытаюсь реализовать функцию, которая будет действовать как клиент Twisted. Он вызывается из кода, который я не могу контролировать. Я попробовал что-то вроде (это взято из кода примера pbsimpleclient.py):
# 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()
И вызывающий абонент будет звонить так:
remcall(hello=1, world=2)
remcall(hi=3, there=4)
Но, как вы уже догадались, выдает ошибку "twisted.internet.error.ReactorNotRestartable".
Как лучше всего это сделать? Я не так беспокоюсь о получении ответа от удаленного конца, но я должен знать, если он не работает и почему.