diff options
author | Andy McCurdy <andy@andymccurdy.com> | 2014-04-28 22:21:24 -0700 |
---|---|---|
committer | Andy McCurdy <andy@andymccurdy.com> | 2014-04-28 22:22:32 -0700 |
commit | 1851035084f49c483d74b41ffc79a50d019e97c5 (patch) | |
tree | af1dc6eb228d1aebb86647403f8085dd5027e45e /benchmarks/base.py | |
parent | 24e9f1147b168ac139ece8d20b5be82583e87731 (diff) | |
download | redis-py-1851035084f49c483d74b41ffc79a50d019e97c5.tar.gz |
tiny benchmark framework and a benchmark to determine the optimal number of bytes to read from a socket
Diffstat (limited to 'benchmarks/base.py')
-rw-r--r-- | benchmarks/base.py | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/benchmarks/base.py b/benchmarks/base.py new file mode 100644 index 0000000..a97001f --- /dev/null +++ b/benchmarks/base.py @@ -0,0 +1,46 @@ +import functools +import itertools +import redis +import sys +import timeit +from redis._compat import izip + + +class Benchmark(object): + ARGUMENTS = () + + def __init__(self): + self._client = None + + def get_client(self, **kwargs): + # eventually make this more robust and take optional args from + # argparse + if self._client is None or kwargs: + defaults = { + 'db': 9 + } + defaults.update(kwargs) + pool = redis.ConnectionPool(**kwargs) + self._client = redis.StrictRedis(connection_pool=pool) + return self._client + + def setup(self, **kwargs): + pass + + def run(self, **kwargs): + pass + + def run_benchmark(self): + group_names = [group['name'] for group in self.ARGUMENTS] + group_values = [group['values'] for group in self.ARGUMENTS] + for value_set in itertools.product(*group_values): + pairs = list(izip(group_names, value_set)) + arg_string = ', '.join(['%s=%s' % (p[0], p[1]) for p in pairs]) + sys.stdout.write('Benchmark: %s... ' % arg_string) + sys.stdout.flush() + kwargs = dict(pairs) + setup = functools.partial(self.setup, **kwargs) + run = functools.partial(self.run, **kwargs) + t = timeit.timeit(stmt=run, setup=setup, number=1000) + sys.stdout.write('%f\n' % t) + sys.stdout.flush() |