检查扭曲的返回值是否为延迟

时间:2014-06-04 18:52:50

标签: python twisted

Twisted中,有一些api可以返回Deferred。有没有快速的方法来测试返回的值是Deferred还是实际上是返回值。

我觉得这样做看起来很草率。

stop_listening_result = self.listening_port.stopListening()

if isinstance(stop_listening_result, defer.Deferred):
    stop_listening_result.addCallback(self.start)
else:
    self.start()

此特定示例在IListeningPort上调用stop,其文档中说: `停止听这个端口。

如果没有立即完成,将返回完成时触发的延迟。

1 个答案:

答案 0 :(得分:7)

听起来你想要maybeDeferred。它将在已完成的Deferred中包含同步结果。正如文档所述:

  

调用可能会或可能不会返回Deferred的函数。

     

使用给定的参数调用给定的函数。如果退回   对象是延迟的,返回它。如果返回的对象是Failure,   将其包裹失败并返回。 否则,将其包装成功   归还。如果引发异常,请将其转换为Failure,将其换行   失败了,然后把它归还。

然后您可以随时假设已返回Deferred

from twisted.internet.defer import maybeDeferred

stop_listening_result = maybeDeferred(self.listening_port.stopListening)
stop_listening_result.addCallback(self.start)