Python XMLRPC并发请求

7 投票
3 回答
6628 浏览
提问于 2025-04-15 15:10

我想找个办法,防止多个主机同时向一个Python的XMLRPC监听器发出命令。这个监听器负责运行一些脚本来执行系统上的任务,如果多个用户同时发出这些命令,就会失败。有没有办法可以在一个命令执行完之前,阻止所有其他请求进来?

3 个回答

0

这里有几种选择:

  1. 使用像 SimpleXMLRPCServer 这样的单进程单线程服务器来依次处理请求。
  2. 在多线程服务器中使用 threading.Lock() 来控制访问。
  3. 在多进程服务器中使用一些外部的锁机制,比如 lockfile 模块或者 mysql 中的 GET_LOCK() 函数。
0

你能否再增加一个沟通渠道?如果可以的话,可以在服务器和客户端之间建立一个“轮到我时请给我回电”的协议。

换句话说,每个客户端会先登记自己想要向服务器发请求的意图,然后服务器会在准备好时给下一个排队的客户端“回电”。

18

我觉得你想要的是Python的SimpleXMLRPCServer模块。我相信这个模块的默认行为是,当它正在处理一个请求时,会阻止新的请求进来。这种默认行为给我带来了很多麻烦,所以我通过混合使用ThreadingMixIn类来改变这种行为,这样我的xmlrpc服务器就可以同时处理多个请求了。

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

如果我理解你的问题没错,SimpleXMLRPCServer就是解决方案。直接使用它就可以了。

撰写回答