En Wed, 14 Oct 2009 22:08:09 -0300, prasanna <prasa...@ix.netcom.com> escribió:

Out of curiosity--one more thing I haven't yet figured out, is there a
xmlrpc command I can send that stops or restarts the server?

If you're using Python 2.6, the easiest way is to register its shutdown() method. Note that it *must* be called from a separate thread (just inherit from ForkingMixIn)

On earlier versions, overwrite the serve_forever loop (so it reads `while not self._quit: ...`) and add a shutdown() method that sets self._quit to True. You'll need to call shutdown twice in that case.

=== begin xmlrpcshutdown.py ===
import sys

def server():
    from SocketServer import ThreadingMixIn
    from SimpleXMLRPCServer import SimpleXMLRPCServer

    # ThreadingMixIn must be included when publishing
    # the shutdown method
    class MyXMLRPCServer(ThreadingMixIn, SimpleXMLRPCServer):
        pass

    print 'Running XML-RPC server on port 8000'
    server = MyXMLRPCServer(("localhost", 8000),
        logRequests=False, allow_none=True)
        # allow_none=True because of shutdown
    server.register_function(lambda x,y: x+y, 'add')
    server.register_function(server.shutdown)
    server.serve_forever()

def client():
    from xmlrpclib import ServerProxy

    print 'Connecting to XML-RPC server on port 8000'
    server = ServerProxy("http://localhost:8000";)
    print "2+3=", server.add(2, 3)
    print "asking server to shut down"
    server.shutdown()

if sys.argv[1]=="server": server()
elif sys.argv[1]=="client": client()
=== end xmlrpcshutdown.py ===


C:\TEMP>start python xmlrpcshutdown.py server

C:\TEMP>python xmlrpcshutdown.py client
Connecting to XML-RPC server on port 8000
2+3= 5
asking server to shut down

C:\TEMP>

--
Gabriel Genellina

--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to