【问题标题】:Stop a Twisted Fiber Mid-Execution在执行过程中停止绞合光纤
【发布时间】:2015-12-08 18:32:49
【问题描述】:

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

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

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

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

我可以做到以下几点。但是,这会在 Twisted reactor 中添加大量待处理的 Deferreds。

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

    yield d

还有其他解决方案吗?

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

【问题讨论】:

标签: python-2.7 twisted fiber


【解决方案1】:

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

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

d.cancel()

yield d
returnValue(None)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多