停止 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)
有很多方法可以创建 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)