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 に答える