3

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

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

在外壳中,我只是>>python MyXmlrpcServer.py启动服务器。

我该怎么做才能启动服务器并使其保持运行?

4

2 回答 2

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)
于 2012-07-15T16:14:52.383 回答
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
于 2012-07-15T16:23:12.740 回答