Python XMLRPC with concurrent requests

孤街醉人 提交于 2019-11-30 05:03:01

问题


I'm looking for a way to prevent multiple hosts from issuing simultaneous commands to a Python XMLRPC listener. The listener is responsible for running scripts to perform tasks on that system that would fail if multiple users tried to issue these commands at the same time. Is there a way I can block all incoming requests until the single instance has completed?


回答1:


I think python SimpleXMLRPCServer module is what you want. I believe the default behavior of that model is blocking new requests when current request is processing. The default behavior gave me lots of trouble and I changed that behavior by mix in ThreadingMixIn class so that my xmlrpc server could respond multiple requests in the same time.

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

If I understand your question correctly, SimpleXMLRPCServer is the solution. Just use it directly.




回答2:


Can you have another communication channel? If yes, then have a "call me back when it is my turn" protocol running between the server and the clients.

In other words, each client would register its intention to issue requests to the server and the said server would "callback" the next-up client when it is ready.




回答3:


There are several choices:

  1. Use single-process-single-thread server like SimpleXMLRPCServer to process requests subsequently.
  2. Use threading.Lock() in threaded server.
  3. You some external locking mechanism (like lockfile module or GET_LOCK() function in mysql) in multiprocess server.


来源:https://stackoverflow.com/questions/1589150/python-xmlrpc-with-concurrent-requests

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!