gpt4 book ai didi

python - 为什么不能将 Deferred 传递给 Python Twisted 中的回调?

转载 作者:行者123 更新时间:2023-11-28 22:07:18 25 4
gpt4 key购买 nike

d = Deferred()
d.callback(Deferred()) # Assertion error saying that a Deferred shouldn't be passed

这是为什么?我查看了代码并提交了消息/Trac,看不出为什么会这样。绕过这个最明显的方法是将 Deferred 放在一个元组中,但为什么首先要有这个限制?

最佳答案

这有两个相关的原因。

首先,它有助于及早发现可能的错误 - 在发生错误的地方附近。一个 Deferred 被回调,结果被传递给它的所有回调。如果您将结果本身设为 Deferred,那么这些回调在被调用时就无能为力了。这引出了下一个原因。

其次,Deferreds 支持链接,它可以处理传递 Deferred 的最常见用例。给定两个 Deferred,a 和 b,链接导致 a 暂停处理它自己的回调链,直到 b 有结果,然后 a 恢复它的回调链并返回 b 的结果。当 Deferred 上的回调返回 Deferred 时会发生这种情况。也可以使用 Deferred.chainDeferred 显式完成。

关于python - 为什么不能将 Deferred 传递给 Python Twisted 中的回调?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2321577/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com