def deferred_from_future(future):
"""Converts a concurrent.futures.Future object to a twisted.internet.defer.Deferred obejct.
See: https://twistedmatrix.com/pipermail/twisted-python/2011-January/023296.html
"""
d = Deferred()
def callback(future):
e = future.exception()
if e:
if DEFERRED_RUN_IN_REACTOR_THREAD:
reactor.callFromThread(d.errback, e)
else:
d.errback(e)
else:
if DEFERRED_RUN_IN_REACTOR_THREAD:
reactor.callFromThread(d.callback, future.result())
else:
d.callback(future.result())
future.add_done_callback(callback)
return d
评论列表
文章目录