2012-07-15 46 views
3

我为我的web应用程序编写了一个python XMLRPC服务器。问题是每当我从shell启动服务器并退出时,xmlrpc服务器也会停止。我试图从另一个文件执行服务器脚本,认为它会继续在后台运行,但没有奏效。以下是用于启动服务器的代码。如何在后台启动python XMLRPC服务器?

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

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

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

回答

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 
+0

尽管我必须运行'supervisord -c /etc/ supervisord.conf',它仍可以很好地工作。这现在解决了它,但我仍然会看看扭曲。 – 2012-07-15 16:44:21

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) 
+0

我从来没有使用扭曲,所以我将采取看它。在PHP中实现扭曲的客户端很容易吗? – 2012-07-15 16:20:37

+1

Twisted是框架,XML-RPC是(在这种情况下)服务器协议,因此您只需要一个PHP xml-rpc客户端 – 2012-07-15 16:23:51

相关问题