你要找也許什麼是twisted.internet.defer.gatherResults
:
d = gatherResults([calc(a), calc2(b), calc3(c)])
def calculated((j, i, f)):
if s:
return combine(i, j, f)
d.addCallback(calculated)
然而,這仍然有s
是不確定的問題。我無法確定您期望s
的定義。如果它是calc3
中的局部變量,那麼您需要將其返回,以便調用者可以使用它。
也許CALC3看起來是這樣的:
def calc3(argument):
s = bool(argument % 2)
return argument + 1
所以,相反,考慮使它看起來像這樣:
Calc3Result = namedtuple("Calc3Result", "condition value")
def calc3(argument):
s = bool(argument % 2)
return Calc3Result(s, argument + 1)
現在你可以重寫調用代碼,所以它的實際工作:
這是不清楚你在這裏問什麼。這聽起來像你知道什麼是回調,但如果是這樣,那麼你應該能夠在這個回答自己到達:
d = gatherResults([calc(a), calc2(b), calc3(c)])
def calculated((j, i, calc3result)):
if calc3result.condition:
return combine(i, j, calc3result.value)
d.addCallback(calculated)
或者,根據您在下面的評論,也許calc3
看起來更像這個(這是最後想我會做,如果它是錯的,你想了解更多的輸入,然後請實際上份額的calc3
定義):
def _calc3Result(result, argument):
if result == "250":
# SMTP Success response, yay
return Calc3Result(True, argument)
# Anything else is bad
return Calc3Result(False, argument)
def calc3(argument):
d = emailObserver("The argument was %s" % (argument,))
d.addCallback(_calc3Result)
return d
幸運的是,calc3
這個定義將工作只是罰款gatherResults
/calculated
上面的代碼塊。
是'calc','calc2','calc3'神奇的VIFF東西嗎?還是他們正常的功能,每個返回一個延期?如果他們是不可思議的VIFF事物,您是否可以擴展您的問題以包含他們的定義? –
所有功能都是「普通」功能,沒有'VIFF'的東西。除了'calc3'包含共享(被緩存的類型)和回調。 – Mythio