0

有很多方法可以创建 Python Twisted 光纤。例如,可以调用reactor.callWhenRunning(helloWorld). helloWorld()将执行,并且当helloWorld()返回时 Fiber 将停止执行。

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

如果执行在其内部helloWorld(),那么我可以简单地从该方法返回。但是,如果程序有 10 个嵌套调用深度怎么办?我将如何阻止光纤继续执行?我想我可以让所有 10 种方法立即返回,但是对于具有 1000 多种方法的大型程序来说,这将是非常困难的。

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

我可以做以下事情。但是,这会在 Twisted reactor 中增加大量待处理Deferred的 s 堆积。

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

    yield d

还有其他解决方案吗?

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

4

1 回答 1

0

解决方案是在ing之前简单地调用cancel()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 回答