6

Python で SimpleXMLRPCServer を介してテストしたいクラスがあります。単体テストをセットアップする方法は、新しいスレッドを作成し、その中で SimpleXMLRPCServer を開始することです。次に、すべてのテストを実行し、最後にシャットダウンします。

これは私のサーバースレッドです:

class ServerThread(Thread):
    running = True
    def run(self):
        self.server = #Creates and starts SimpleXMLRPCServer

        while (self.running):
            self.server.handle_request()

    def stop(self):
        self.running = False
        self.server.server_close()

問題は、ServerThread.stop() を呼び出し、続いて Thread.stop() と Thread.join() を呼び出しても、handle_request で既に要求を待機している場合、スレッドが適切に停止しないことです。また、ここには使用できる割り込みまたはタイムアウトのメカニズムがないように見えるため、サーバー スレッドをきれいにシャットダウンする方法について途方に暮れています。

4

3 に答える 3

1

2つの提案。

提案 1 は、別のスレッドではなく、別のプロセスを使用することです。

  • スタンドアロンの XMLRPC サーバー プログラムを作成します。

  • で始めsubprocess.Popen()ます。

  • テストが完了したら、それを殺します。標準の OS (Windows ではない) では、kill はうまく機能します。ただし、Windows には単純な kill 関数はありませんが、そのためのレシピがあります。

もう 1 つの提案は、XMLRPC サーバーに、サーバーの自己破壊を引き起こす機能を持たせることです。プロセスを停止する同様の例外を呼び出す、または発生させるsys.exit()関数を定義します。os.abort()

于 2009-02-02T11:54:29.483 に答える