如何在后台启动python XMLRPC服务器?

时间:2012-07-15 16:09:10

标签: python shell xml-rpc

我为我的Web应用程序编写了一个python XMLRPC服务器。问题是每当我从shell启动服务器并退出时,xmlrpc服务器也会停止。我尝试从另一个文件执行服务器脚本,认为它将继续在后台运行但不起作用。这是用于启动服务器的代码。

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

在shell中我只是>>python MyXmlrpcServer.py来启动服务器。

如何才能启动服务器并使其保持运行?

2 个答案:

答案 0 :(得分:4)

最好使用twisted来创建XML-RPC服务器。因此,您不需要编写自己的服务器,它非常灵活,您可以使用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)

答案 1 :(得分:4)

@warwaruk提出了一个有用的建议; Twisted XML-RPC简单而强大。但是,如果您只是想在“后台”中运行和管理python进程,请查看Supervisord。这是一个简单的流程管理系统。

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

编辑该配置文件以添加流程定义...

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

启动supervisord并开始您的流程

$ supervisord
$ supervisorctl start mycoolproc