gpt4 book ai didi

python - Twisted chainDeferred, deferred.result is None

转载 作者:行者123 更新时间:2023-12-01 04:48:45 26 4
gpt4 key购买 nike

我正在尝试链接延迟:

def getDeferred1():
d1 = defer.Deferred()
d1.addCallback(printx)
return d1

def getDeferred2():
d2 = defer.Deferred()
d2.addCallback(printy)
return d2

def printx(x):
print 'printx', x
return x

def printy(y):
print 'printy', y
return y

d = getDeferred1()
d2 = getDeferred2()
# d.chainDeferred(d2) #1
# d.addCallback(printy) #2

d.callback('RESULT')
print 'Result', d.result

当前代码将打印:

printx RESULT
Result RESULT

但是如果我取消注释第 1 行,将 d2 链接到 dd.result 将是 None >:

printx RESULT
printy RESULT
Result None

在链接另一个 deferred 时如何获取 deferred.result 而不是 None

最佳答案

通常不需要使用 chainDeferred明确地。当一个延迟对象从另一个延迟对象的回调中返回时,延迟对象会自动链接在一起。

使用 Deferred.result 基本上总是错误的直接地。获取 Deferred 结果的方法是向 Deferred 添加回调。当Deferred有结果时,回调将被调用。

像示例代码中那样将 Deferred 的创建和回调分开并不符合习惯。 getDeferred1正在创建此代码最终回调的 Deferred。这将是惯用的 getDeferred1对最终负责d.callback打电话。

由于这段代码是抽象的且不惯用的,所以我不太确定您想要完成什么。我能给的唯一建议是你可能不需要chainDeferred并且您绝对不应该编写访问 Deferred.result 的代码.

关于python - Twisted chainDeferred, deferred.result is None,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28860531/

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