3

ツイスト用のカスタムリアクターを作成していますが、停止する必要がある場合は、クリーニングが必要です。私は次のようにstopメソッドをオーバーライドしてみました:

def stop(self):
    posixbase.PosixReactorBase.stop(self)
    #cleanup code here

ただし、常に呼び出されるとは限らないようです。このようにトライアルを実行すると、呼び出さpython -m cProfile /usr/bin/trial -r custom tests/ | grep "stop"れる停止メソッドは次のとおりです。

    2    0.000    0.000    0.000    0.000 abstract.py:397(stopReading)
    1    0.000    0.000    0.000    0.000 abstract.py:405(stopWriting)
    1    0.000    0.000    0.000    0.000 log.py:691(stop)
    1    0.000    0.000    0.000    0.000 protocol.py:678(stopProtocol)
    3    0.000    0.000    0.000    0.000 reporter.py:97(stopTest)
    3    0.000    0.000    0.000    0.000 result.py:79(stopTest)
    1    0.000    0.000    0.000    0.000 udp.py:218(stopListening)
4

1 に答える 1

3

これをしないでください。リアクターをサブクラス化しないでください。そのメソッドをオーバーライドしないでください。リアクタが停止したときにコードを実行する場合は、を使用しますreactor.addSystemEventTrigger("before", "shutdown", f)(または"during"shutdownまたは"after"shutdown)。

または、より高いレベルのAPIを使用Serviceし、stopServiceメソッドを使用してを定義し、サービスをに接続しますapplication

于 2012-12-30T16:56:42.920 に答える