目前我正在使用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
如果名称 ==" 主要":
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()方法,但似乎它进入了somekind的无限循环。
您能否建议一些正确关闭服务器的正确方法。
提前致谢
答案 0 :(得分: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()
通过使用handle_request()
,此代码使用状态变量self.quit
来指示是否退出无限循环。