在python中关闭SimpleXMLRPCServer服务器

问题描述 投票:4回答:1

当前,我正在使用Python中的SimpleXMLRPCServer模块编写应用程序。

此应用程序的基本目的是继续在服务器上运行,并继续检查队列中是否有任何任务。如果它在队列中遇到任何新请求,则为该请求提供服务。

我正在尝试做的事情的快照:

class MyClass():

"""
This class will have methods which will be exposed to the clients
"""
def __init__(self):
    taskQ = Queue.Queue()

def do_some_task(self):
    while True:
         logging.info("Checking the Queue for any Tasks..")
         task = taskQ.get()
         # Do some processing based on the availability of some task

主要

如果名称 ==“ ”:

server = SimpleXMLRPCServer.SimpleXMLRPCServer((socket.gethostname(), Port)
classObj = MyClass()
rpcserver.register_function(classObj.do_some_task)
rpcserver.serve_forever()

一旦服务器启动,它将永远停留在do_some_task方法内的循环中,以继续检查队列中是否有任何任务。这是我想要实现的。但是现在我要正常关闭服务器。在这种情况下,我无法关闭服务器。

到目前为止,我已经尝试使用全局标志STOP_SERVER表示'True',并在do_some_task while循环中检查其状态以退出并停止服务器。但没有帮助。

尝试过使用SimpleXMLRPCServer的SHUTDOWN()方法,但似乎正在陷入某种无限循环。

您能否建议一些适当的方法来正常关闭服务器。

提前感谢

python shutdown simplexmlrpcserver
1个回答
0
投票

如果要手动将其关闭,则应使用handle_request()而不是serve_forever()。因为SimpleXMLRPCServer是作为单个线程实现的,所以serve_forever()将使服务器实例陷入无限循环。

您可以参考此article。这是从那里引用的示例:

from SimpleXMLRPCServer import *

class MyServer(SimpleXMLRPCServer):

    def serve_forever(self):
    self.quit = 0
    while not self.quit:
        self.handle_request()


def kill():
    server.quit = 1
    return 1


server = MyServer(('127.0.0.1', 8000))
server.register_function(kill)

server.serve_forever()
© www.soinside.com 2019 - 2024. All rights reserved.