7

我正在寻找一种方法来防止多个主机同时向 Python XMLRPC 侦听器发出命令。侦听器负责运行脚本以在该系统上执行任务,如果多个用户尝试同时发出这些命令,这些任务将失败。有没有办法可以阻止所有传入的请求,直到单个实例完成?

4

3 回答 3

17

我认为 python SimpleXMLRPCServer 模块是你想要的。我相信该模型的默认行为是在处理当前请求时阻止新请求。默认行为给我带来了很多麻烦,我通过在 ThreadingMixIn 类中混合来改变这种行为,以便我的 xmlrpc 服务器可以同时响应多个请求。

class RPCThreading(SocketServer.ThreadingMixIn, SimpleXMLRPCServer.SimpleXMLRPCServer):
    pass

如果我正确理解您的问题,SimpleXMLRPCServer 就是解决方案。直接用就行了。

于 2009-10-19T17:12:22.233 回答
0

你能有另一个沟通渠道吗?如果是,则在服务器和客户端之间运行“轮到我时给我回电”协议。

换句话说,每个客户端将注册其向服务器发出请求的意图,并且所述服务器将在准备好时“回调”下一个客户端。

于 2009-10-19T14:58:33.113 回答
0

有几种选择:

  1. 使用单进程单线程服务器喜欢SimpleXMLRPCServer随后处理请求。
  2. threading.Lock()在线程服务器中使用。
  3. 多进程服务器中的一些外部锁定机制(如mysql 中的lockfile模块或GET_LOCK()函数)。
于 2009-10-19T17:27:52.637 回答