2012-07-15 45 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

相關問題