def cbResponse(response): if response.code != responseCode: raise Exception( "Request %r received unexpected response code: %d" % ( params, response.code)) d = readBody(response) def cbBody(ignored): after = time() msg('response received') # Give things a moment to settle down. This is a hack # to try to collect the last of the dtrace output # which may still be sitting in the write buffer of # the dtrace process. It would be nice if there were # a more reliable way to know when we had it all, but # no luck on that front so far. The implementation of # mark is supposed to take care of that, but the # assumption it makes about ordering of events appears # to be invalid. # XXX Disabled until I get a chance to seriously # measure what affect, if any, it has. # d = deferLater(reactor, 0.5, dtrace.mark) d = dtrace.mark() def cbStats(stats): msg('stats collected') for k, v in stats.iteritems(): data.setdefault(k, []).append(v) data[urlopen].append(after - before) d.addCallback(cbStats) return d d.addCallback(cbBody) return d
def check(response): d = readBody(response) def read(body): print('body', repr(body)) if response.code != 200: raise Exception("Upload failed: %r" % (response.code,)) d.addCallback(read) return d
def sample(dtrace, samples, agent, paramgen): data = [] yield dtrace.start() for i in range(samples): before = time() response = yield agent.request(*paramgen()) yield readBody(response) after = time() data.append(after - before) stats = yield dtrace.stop() stats[Duration('urlopen time')] = data returnValue(stats)