停止 Twisted Fiber 中执行

Stop a Twisted Fiber Mid-Execution

有很多方法可以创建 Python 双绞线。例如,可以调用 reactor.callWhenRunning(helloWorld)helloWorld() 将执行,纤程将在 helloWorld() return 时停止执行。

如果执行到一半 helloWorld() 我想停止纤程的执行而不影响其余纤程怎么办?我该怎么做?

如果执行在 helloWorld() 本身内部,那么我可以简单地从方法中 return。但是,如果程序有 10 个嵌套调用呢?我将如何阻止光纤继续执行?我想我可以立即制作所有 10 种方法 return,但是要为具有 1000 种方法的大型程序编写代码将非常困难。

我可以提出例外。这将起作用,除非调用堆栈中的某些方法(除了反应堆)捕获异常。

我可以做到以下几点。但是,这会增加很多待处理的 Deferred 堆积在 Twisted 反应器中。

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

    yield d

还有其他解决方案吗?

注意:Python 2.6 解决方案是理想的。

解决方案是在 yield 之前在 Deferred 上简单地调用 cancel()。在 yield.

之后代码不会继续执行
d       = defer.Deferred()
d.delay = reactor.callLater(sleepTime, d.callback, None)

d.cancel()

yield d
returnValue(None)