[Twisted-Python] how to cancel a long running job on a server ?
    Thomas Jung 
    Thomas.Jung at iisb.fraunhofer.de
       
    Tue May 10 04:26:38 MDT 2005
    
    
  
Hello,
another newbie question:
I have a server, where I can remotely call a function like remote_calc(), 
using the perspective broker,
which returns giving a result.
Sometimes, I want to cancel that computation, calling e.g. remote_cancel() 
(which remains to be implemented.....)
How can I have remote_calc() not to return before the result is done, and 
still be able to call remote_cancel while its running ?
I tried this:
=============================================================
from twisted.spread import pb
from twisted.internet import reactor,defer,threads
@defer.deferredGenerator
def calc(adeferred):
    print "this is calc..."
    d=defer.waitForDeferred(adeferred)
    yield d
    result=d.getResult()
    print "calc: result=",result
    return
def do_calc():
    print "do_calc starting..."
    for i in range(10000):
        for j in range(10000):
            pass
    print "do_calc done..."
    return 456
class ServerObject(pb.Root):
    def remote_cancel(self):
        print "this is server::cancel..."
    def remote_calc(self,result):
        print "server::calc: ..."
       # thought this would wait until done, but doesnt....
        calc(threads.deferToThread(do_calc))
        print "server::calc: returning"
        return 123
if __name__ == '__main__':
    factory = pb.PBServerFactory(ServerObject())
    reactor.listenTCP(8800, factory)
    reactor.run()
===============================================================================
My expectation was that the call to "calc" in remote_calc would block, but it 
does not.
And if I dont defer the calculation to a thread, remote_cancel is not done 
until calculation finishes ...
Maybe there is some completely different way to do this in twisted ?
Thanks for any hint !
-- 
Dr. Thomas Jung
Fraunhofer-Institut IISB
91058 Erlangen, Schottkystr. 10
+49 9131 761264
    
    
More information about the Twisted-Python
mailing list