from time import time
from twisted.internet import reactor
from twisted.internet.defer import Deferred, DeferredList, inlineCallbacks, returnValue
@inlineCallbacks
def timeWrapper(d):
start = time()
result = (yield d)
end = time()
returnValue(end - start)
def sleep(t):
d = Deferred()
reactor.callLater(t, lambda *args: d.callback(None))
return d
@inlineCallbacks
def waitAll(deferreds):
results = (yield DeferredList(deferreds, fireOnOneErrback=1))
if any(not success for success, result in results):
raise Exception(results)
returnValue([result for success, result in results])
def runDeferred(deferred):
result = {"return": None, "error": None}
@inlineCallbacks
def runThenCrash(result = result):
try:
result["return"] = yield deferred
except Exception, e:
result["error"] = e
reactor.stop()
runThenCrash()
reactor.run()
if result["error"] is not None:
raise result["error"]
else:
return result["return"]