From 153bc4288d5941dafcaca24fe1f4859419d744e0 Mon Sep 17 00:00:00 2001 From: Marcin Koziej Date: Wed, 12 Sep 2012 16:59:40 +0200 Subject: [PATCH] profiling --- .../catalogue/management/commands/importbooks.py | 14 ++++++++++++-- apps/search/index.py | 1 + apps/wolnelektury_core/management/profile.py | 16 ++++++++++++++++ 3 files changed, 29 insertions(+), 2 deletions(-) create mode 100644 apps/wolnelektury_core/management/profile.py diff --git a/apps/catalogue/management/commands/importbooks.py b/apps/catalogue/management/commands/importbooks.py index 8f181cf98..c1a743077 100644 --- a/apps/catalogue/management/commands/importbooks.py +++ b/apps/catalogue/management/commands/importbooks.py @@ -11,6 +11,10 @@ from django.core.management.base import BaseCommand from django.core.management.color import color_style from django.core.files import File +from wolnelektury_core.management.profile import profile +import objgraph +import gc + from catalogue.models import Book from picture.models import Picture @@ -60,11 +64,12 @@ class Command(BaseCommand): picture = Picture.from_xml_file(file_path, overwrite=options.get('force')) return picture + # @profile def handle(self, *directories, **options): from django.db import transaction self.style = color_style() - + verbose = options.get('verbose') force = options.get('force') show_traceback = options.get('traceback', False) @@ -123,10 +128,15 @@ class Command(BaseCommand): if import_picture: self.import_picture(file_path, options) else: + objgraph.show_growth() self.import_book(file_path, options) + objgraph.show_growth() + print "--------------------" + files_imported += 1 transaction.commit() - + ## track. + except (Book.AlreadyExists, Picture.AlreadyExists): print self.style.ERROR('%s: Book or Picture already imported. Skipping. To overwrite use --force.' % file_path) diff --git a/apps/search/index.py b/apps/search/index.py index 556bbfe5c..26da06220 100644 --- a/apps/search/index.py +++ b/apps/search/index.py @@ -146,6 +146,7 @@ class Index(SolrIndex): Removes all tags from index, then index them again. Indexed fields include: id, name (with and without polish stems), category """ + log.debug("Indexing tags") remove_only = kw.get('remove_only', False) # first, remove tags from index. if tags: diff --git a/apps/wolnelektury_core/management/profile.py b/apps/wolnelektury_core/management/profile.py new file mode 100644 index 000000000..a68453d05 --- /dev/null +++ b/apps/wolnelektury_core/management/profile.py @@ -0,0 +1,16 @@ + +import cProfile +import functools + +_object = None + +def profile(meth): + def _wrapper(self, *args, **kwargs): + object = self + setattr(object, "__%s" % meth.__name__, meth) + cProfile.runctx('object.__%s(object, *args, **kwargs)' % (meth.__name__, ), globals(), locals(), + "wlprofile") + + functools.update_wrapper(_wrapper, meth) + return _wrapper + -- 2.20.1