停止扭曲光纤中期执行

时间:2015-12-08 18:32:50

标签: python-2.7 twisted fiber

创建Python Twisted光纤的方法有很多种。例如,可以调用reactor.callWhenRunning(helloWorld)。 <{1}}将在helloWorld()返回时执行,光纤将停止执行。

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

如果执行在helloWorld()本身,那么我可以简单地从方法返回。但是,如果该程序是10个嵌套调用怎么办呢?如何阻止光纤的执行继续?我想我可以让所有10个方法立即返回,但对于使用1000种方法的大型程序进行编码将非常困难。

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

我可以做以下事情。但是,这将在Twisted反应堆中添加大量待处理的helloWorld()

Deferred

还有其他解决方案吗?

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

1 个答案:

答案 0 :(得分:0)

解决方案是在cancel()之前简单地调用yield。代码不会在yield之后继续执行。

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

d.cancel()

yield d
returnValue(None)