在 python 中关闭 SimpleXMLRPCServer 服务器

use*_*135 7 python shutdown simplexmlrpcserver

目前我正在使用 Python 中的 SimpleXMLRPCServer 模块编写一个应用程序。

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

我正在尝试做的快照:

类 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
Run Code Online (Sandbox Code Playgroud)

主要的

如果名称==“主要”:

server = SimpleXMLRPCServer.SimpleXMLRPCServer((socket.gethostname(), Port)
classObj = MyClass()
rpcserver.register_function(classObj.do_some_task)
rpcserver.serve_forever()
Run Code Online (Sandbox Code Playgroud)

一旦服务器启动,它就会永远留在 do_some_task 方法中的循环中,以不断检查队列中的任何任务。这就是我想要实现的目标。但现在我想优雅地关闭服务器。在这种情况下,我无法关闭服务器。

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

尝试使用 SimpleXMLRPCServer 的 SHUTDOWN() 方法,但它似乎进入了某种无限循环。

您能否建议一些适当的方法来优雅地关闭服务器。

提前致谢

Yan*_*Xie 4

如果您想手动关闭它,则应该使用handle_request()而不是。serve_forever()因为SimpleXMLRPCServer是作为单线程实现的,这serve_forever()将使服务器实例运行到无限循环中。

你可以参考这篇文章。这是从那里引用的一个例子:

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()
Run Code Online (Sandbox Code Playgroud)

通过使用handle_request(),此代码使用状态变量self.quit来指示是否退出无限循环。