之所以如此壞了,我希望你是仁慈的我:如何結合callLater和addCallback?
reactor.callLater(0, myFunction, parameter1).addCallback(reactor.stop)
reactor.run()
myFunction
返回推遲。
我希望這是清楚我想做的事:
- 只要反應堆在運行,我想打電話給
myFunction
。這就是爲什麼我使用0作爲延遲參數。除了callLater之外,沒有其他方法嗎?它看起來很有趣,通過它延遲0. - 我想盡快停止反應堆
myFunction
已完成任務。
是我到目前爲止的問題是:
AttributeError: DelayedCall instance has no attribute 'addCallback'
。很公平!我如何在由myFunction
開始的回調鏈中設置回調?exceptions.TypeError: stop() takes exactly 1 argument (2 given)
。
要解決的第二個問題,我不得不定義一個特殊的功能:
def stopReactor(result):
gd.log.info('Result: %s' % result)
gd.log.info('Stopping reactor immediatelly')
reactor.stop()
和代碼更改爲:
reactor.callLater(0, myFunction, parameter1).addCallback(stopReactor)
reactor.run()
(仍然沒有工作,因爲使用callLater問題的,但stopReactor
現在會工作)
是否真的沒有其他方式可以撥打reactor.stop
除了de罰款一個額外的功能?
我發現這個選項非常可讀的。 'lambda忽略'位對我來說很神奇:你能澄清一下它到底做了什麼嗎? – dangonfast
Deferred上的回調函數用參數調用。 'reactor.stop'不帶任何參數。 '忽略lambda:reactor.stop()'接受和參數,忽略它,並且不帶任何參數地調用'reactor.stop'。 –
這會更傳統一點:'lambda _:reactor.stop' – DonGar