All pastes #517752 Raw Edit

Anonymous

public text v1 · immutable
#517752 ·published 2007-05-29 03:37 UTC
rendered paste body
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"]