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

Ale*_*lex 2 python twisted

Twisted中有一些可以返回的api Deferred.是否有一种快速方法可以测试返回值是否为a Deferred或实际上是返回值.

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

stop_listening_result = self.listening_port.stopListening()

if isinstance(stop_listening_result, defer.Deferred):
    stop_listening_result.addCallback(self.start)
else:
    self.start()
Run Code Online (Sandbox Code Playgroud)

这个特殊的例子是调用stopa IListeningPort,从他们的文档中说:`停止监听这个端口.

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

dan*_*ano 7

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

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

使用给定的参数调用给定的函数.如果返回的对象是Deferred,则返回它.如果返回的对象是Failure,请将其包装失败并返回.否则,将其包装成功并返回.如果引发异常,请将其转换为Failure,将其包装为fail,然后返回它.

然后你可以随时假设Deferred已经返回:

from twisted.internet.defer import maybeDeferred

stop_listening_result = maybeDeferred(self.listening_port.stopListening)
stop_listening_result.addCallback(self.start)
Run Code Online (Sandbox Code Playgroud)