【发布时间】: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 解决方案将是理想的。
【问题讨论】:
-
不管怎样,Twisted 中没有“纤维”这样的东西。 Fibers 是一个适用于 Windows 的协作线程库 - msdn.microsoft.com/en-us/library/windows/desktop/… - 而 Twisted 的工作方式不同。
-
我不知道如何称呼 Twisted。这就是为什么我把纤维放在引号里。但是,看了en.wikipedia.org/wiki/Fiber_%28computer_science%29之后,似乎纤维是正确的词。如果你有更好的词,请分享。
标签: python-2.7 twisted fiber