7
from twisted.internet import reactor
8
from twisted.internet.defer import inlineCallbacks, waitForDeferred
10
def benchmark(times, timer=time.time, timeStore=None, progressDest=sys.stdout):
12
def _decorated(*args, **kwargs):
13
for x in xrange(times):
15
result = yield f(*args, **kwargs)
16
timeStore.setdefault(f.__name__, []).append(timer()-startTime)
18
if x%(times*.10) == 0.0:
19
progressDest.write('.')
21
progressDest.write('\n')
23
_decorated.__name__ = f.__name__
25
return inlineCallbacks(_decorated)
32
benchmarkDecorator = benchmark(RUN_TIMES, timeStore=TIMES)
36
def bench_saveDoc(server):
37
d = server.saveDoc('benchmarks', """
39
"Subject":"I like Planktion",
41
"PostedDate":"2006-08-15T17:30:12-04:00",
42
"Tags":["plankton", "baseball", "decisions"],
43
"Body":"I decided today that I don't like baseball. I like plankton."
50
def run_tests(server):
51
for bench in [bench_saveDoc]:
52
print "benchmarking %s" % (bench.__name__,)
53
result = yield bench(server).addCallback(_printCb)
55
sum(TIMES[bench.__name__])/len(TIMES[bench.__name__]),)
57
numpy.std(TIMES[bench.__name__]),)
59
min(TIMES[bench.__name__]),)
61
max(TIMES[bench.__name__]),)
62
print " total: %r" % (
63
sum(TIMES[bench.__name__]),)
67
s = paisley.CouchDB('localhost')
68
d = s.createDB('benchmarks')
70
d.addCallback(lambda _: run_tests(s))
80
if __name__ == '__main__':
84
d.addBoth(lambda _: reactor.stop())
86
reactor.callWhenRunning(_run)