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