带有并发请求的Python XMLRPC

时间:2009-10-19 14:54:08

标签: python xml-rpc

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

3 个答案:

答案 0 :(得分:15)

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

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

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

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

有几种选择:

  1. 使用SimpleXMLRPCServer之类的单进程单线程服务器随后处理请求。
  2. 在线程服务器中使用threading.Lock()
  3. 您在多进程服务器中使用了一些外部锁定机制(如lockfile模块或mysql中的GET_LOCK()函数)。