[Twisted-Python] How to invoke the remote method based on twisted in django web app?

hi,all: I developed a web app in diango and a remote service in twisted, and I want to invoke the twisted remote method in django web.example: the remote service code : class Echoer(pb.Root): def remote_echo(self, task): print 'echoing:', task return task if __name__ == '__main__': reactor.listenTCP(8789, pb.PBServerFactory(Echoer())) reactor.run() ------------------------------------------------------------------------------------------------------------- and the djiango views.py code : def register_task(requst): """register the task""" ................. factory = pb.PBClientFactory() reactor.connectTCP("localhost", 8789, factory) d = factory.getRootObject() d.addCallback(lambda object: object.callRemote("echo", task)) d.addCallback(lambda echo: 'server echoed: '+echo[0]+str(echo[1])) d.addErrback(lambda reason: 'error: '+str(reason.value)) d.addCallback(util.println) d.addCallback(lambda _: reactor.stop()) reactor.run() .......................... return HttpResponseRedirect('/push_task/') # Redirect after POST ------------------------------------------------------------------------------------------------------------- but when I post a request to django web app ,a exception display: Traceback (most recent call last): File "C:\Python25\Lib\site-packages\twisted\internet\base.py", line 374, in fi reEvent DeferredList(beforeResults).addCallback(self._continueFiring) File "C:\Python25\Lib\site-packages\twisted\internet\defer.py", line 195, in a ddCallback callbackKeywords=kw) File "C:\Python25\Lib\site-packages\twisted\internet\defer.py", line 186, in a ddCallbacks self._runCallbacks() File "C:\Python25\Lib\site-packages\twisted\internet\defer.py", line 328, in _ runCallbacks self.result = callback(self.result, *args, **kw) --- <exception caught here> --- File "C:\Python25\Lib\site-packages\twisted\internet\base.py", line 387, in _c ontinueFiring callable(*args, **kwargs) File "C:\Python25\Lib\site-packages\twisted\internet\base.py", line 1123, in _ reallyStartRunning self._handleSignals() File "C:\Python25\Lib\site-packages\twisted\internet\base.py", line 1068, in _ handleSignals signal.signal(signal.SIGINT, self.sigInt) exceptions.ValueError: signal only works in main thread -------------------------------------------------------------------------------------------------------------- so ,How I correctly invoke the remote method? -- Boern Parx
participants (3)
-
Boern
-
Burus
-
Phil Mayers