1

どういうわけかxmlrpcクライアントリクエストをキャンセルすることは可能ですか?

1つのスレッドに次のようなコードがあるとしましょう。

svr = xmlrpclib.ServerProxy('http://localhost:9092')
svr.DoSomethingWhichNeedTime()

ある種のタイムアウトという意味ではありません...別のスレッドから、作業をキャンセルするイベントを取得できる場合があります。そして、このリクエストをキャンセルする必要があります。

私はそれができることを知っていますtwistedが、標準のxmlrpclibでそれを行うことは可能ですか?

4

2 に答える 2

2

まず、クライアント(xmlrpclib)ではなく、サーバー側で実装する必要があります。XML-RPCサーバーへのHTTPリクエストを単に中断した場合、サーバーで実行されている長いプロセスが完全に中断されることは保証されません。したがって、xmlrpclibはこの機能を持つことができません。

この動作を実装する場合は、2つのタイプのリクエストを作成する必要があります。最初のタイプのリクエストは、サーバーに長いプロセスを開始するように指示します。バックグラウンドで(別のスレッドまたはプロセスで)実行する必要があり、XML-RPCサーバーは応答(「プロセスが開始されました!」)をクライアントにすぐに送信する必要があります。プロセスを停止する場合、クライアントはサーバーにプロセスの実行を停止するように指示する別の要求を送信する必要があります。

于 2012-05-09T19:42:52.533 に答える
1

はい、本当に汚いハックをしたいのなら…。

基本的に、ServerProxyオブジェクトは、基になるソケット/http接続へのハンドルを保持します。これらの内部に到達し、ソケットを単にclose()すると、例外を除いてクライアントコードが爆発します。あなたがそれらを適切に扱うならば、それはあなたのキャンセルです。

トランスポートパラメータを介してServerProxyに独自のトランスポートクラスを登録し、必要な処理を実行するcancelメソッドを指定すると、もう少し正気になります。

チャネルを直接閉じることに反応しない限り、サーバーが処理を停止することはありません。

于 2012-05-09T19:51:27.733 に答える