/pexp/management/commands/polybench.py
https://bitbucket.org/bconstantin/django_polymorphic/ · Python · 106 lines · 74 code · 21 blank · 11 comment · 10 complexity · e2b7f81a5d83858897061130db1a5b1f MD5 · raw file
- # -*- coding: utf-8 -*-
- """
- This module is a scratchpad for general development, testing & debugging
- """
- from django.core.management.base import NoArgsCommand
- from django.db.models import connection
- from pprint import pprint
- import settings
- import sys
- from pexp.models import *
- num_objects=1000
- def reset_queries():
- connection.queries=[]
- def show_queries():
- print; print 'QUERIES:',len(connection.queries); pprint(connection.queries); print; reset_queries()
- import time
- ###################################################################################
- ### benchmark wrappers
- def print_timing(func, message='', iterations=1):
- def wrapper(*arg):
- results=[]
- reset_queries()
- for i in xrange(iterations):
- t1 = time.time()
- x = func(*arg)
- t2 = time.time()
- results.append((t2-t1)*1000.0)
- res_sum=0
- for r in results: res_sum +=r
- median = res_sum / len(results)
- print '%s%-19s: %.0f ms, %i queries' % (
- message,func.func_name,
- median,
- len(connection.queries)/len(results)
- )
- sys.stdout.flush()
- return wrapper
- def run_vanilla_any_poly(func, iterations=1):
- f=print_timing(func,' ', iterations)
- f(nModelC)
- f=print_timing(func,'poly ', iterations)
- f(ModelC)
- ###################################################################################
- ### benchmarks
- def bench_create(model):
- for i in xrange(num_objects):
- model.objects.create(field1='abc'+str(i), field2='abcd'+str(i), field3='abcde'+str(i))
- #print 'count:',model.objects.count()
- def bench_load1(model):
- for o in model.objects.all():
- pass
- def bench_load1_short(model):
- for i in xrange(num_objects/100):
- for o in model.objects.all()[:100]:
- pass
- def bench_load2(model):
- for o in model.objects.all():
- f1=o.field1
- f2=o.field2
- f3=o.field3
- def bench_load2_short(model):
- for i in xrange(num_objects/100):
- for o in model.objects.all()[:100]:
- f1=o.field1
- f2=o.field2
- f3=o.field3
- def bench_delete(model):
- model.objects.all().delete()
- ###################################################################################
- ### Command
- class Command(NoArgsCommand):
- help = ""
- def handle_noargs(self, **options):
- print 'polybench - sqlite test db is stored in:',settings.SQLITE_DB_PATH
- func_list = [
- ( bench_delete, 1 ),
- ( bench_create, 1 ),
- ( bench_load1, 5 ),
- ( bench_load1_short, 5 ),
- ( bench_load2, 5 ),
- ( bench_load2_short, 5 )
- ]
- for f,iterations in func_list:
- run_vanilla_any_poly(f,iterations=iterations)
- print