3

Webアプリケーション用にPythonXMLRPCサーバーを作成しました。問題は、シェルからサーバーを起動して終了するたびに、xmlrpcサーバーも停止することです。バックグラウンドで引き続き実行されると考えて、別のファイルからサーバースクリプトを実行しようとしましたが、機能しませんでした。サーバーの起動に使用されるコードは次のとおりです。

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

シェルでは>>python MyXmlrpcServer.py、サーバーを起動するだけです。

サーバーを起動して実行し続けるにはどうすればよいですか?

4

2 に答える 2

4

ツイストを使用して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は有用な提案をします。ツイスト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
$ supervisorctl start mycoolproc
于 2012-07-15T16:23:12.740 に答える