简体   繁体   中英

How do I start python XMLRPC server in the background?

I wrote a python XMLRPC server for my web application. The problem is whenever I start the server from shell and exit, xmlrpc server stops as well. I tried executing server script from another file thinking that it will continue to run in the background but that didn't work. Here's the code used to start a server.

host = 'localhost'
port = 8000
server = SimpleXMLRPCServer.SimpleXMLRPCServer((host, port))
server.register_function(getList)
server.serve_forever()

In the shell I just do >>python MyXmlrpcServer.py to start a server.

What do I do to be able to start a server and keep it running?

Better use twisted to create an XML-RPC server. Thus you will not need writing your own server, it is very flexible, and you will be able to run in background using twistd :

#!/usr/bin/env python

import time, datetime, os, sys
from twisted.web import xmlrpc, server
from twisted.internet import reactor


class Worker(xmlrpc.XMLRPC):

    def xmlrpc_test(self):
        print 'test called!'


port = 1235
r = Worker(allowNone=True)

if __name__ == '__main__':
    print 'Listening on port', port
    reactor.listenTCP(port, server.Site(r))
    reactor.run()
else: # run the worker as a twistd service application: twistd -y xmlrpc_server.py --no_save
    from twisted.application import service, internet
    application = service.Application('xmlrpc_server')
    reactor.listenTCP(port, server.Site(r))
    reactor.run()
    #internet.TCPServer(port, server.Site(r)).setServiceParent(application)

@warwaruk makes a useful suggestion; Twisted XML-RPC is simple and robust. However, if you simply want to run and manage a python process in the 'background' take a look at Supervisord . It is a simple process management system.

$ pip install supervisor
$ echo_supervisord_conf > /etc/supervisord.conf

Edit that config file to add a definition of your process thus...

  [program:mycoolproc]
  directory=/path/to/my/script/dir
  command=python MyXmlrpcServer.py

Start supervisord and start your process

$ supervisord
$ supervisorctl start mycoolproc

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM