0

Python Twisted ファイバーを作成するには、さまざまな方法があります。たとえば、 を呼び出すことができますreactor.callWhenRunning(helloWorld)helloWorld()が実行され、helloWorld()返されるとファイバーは実行を停止します。

実行の途中helloWorld()で、残りのファイバーに影響を与えずにファイバーの実行を停止したい場合はどうすればよいでしょうか? どうすればいいですか?

実行がそれ自体の内部にある場合はhelloWorld()、メソッドから単純に戻ることができます。しかし、プログラムが 10 個のネストされた呼び出しの深さである場合はどうなるでしょうか? ファイバーの実行が継続しないようにするにはどうすればよいですか? 10 個のメソッドすべてをすぐに返すようにすることはできると思いますが、1000 個のメソッドを含む大規模なプログラムをコーディングするのは非常に困難です。

例外を発生させることができました。これは、(リアクター以外の) コール スタック内のメソッドが例外をキャッチしない限り機能します。

次のことができました。ただし、これにより、多くの保留中Deferredの s が追加され、Twisted リアクターに蓄積されます。

while True:
    d       = defer.Deferred()
    d.delay = reactor.callLater(sys.maxint, d.callback, None)

    yield d

他の解決策はありますか?

注: Python 2.6 ソリューションが理想的です。

4

1 に答える 1

0

解決策は、 ingcancel()の前に単に Deferred を呼び出すことです。yieldの後にコードは実行を継続しませんyield

d       = defer.Deferred()
d.delay = reactor.callLater(sleepTime, d.callback, None)

d.cancel()

yield d
returnValue(None)
于 2015-12-08T19:16:52.413 に答える