В TearDown моего UnitTests я главным образом делаю это:
using( ISession s = ... )
{
s.Delete ("from Object o");
s.Flush();
}
Это должно удалить все объекты. Если Вы хотите удалить все экземпляры одного определенного объекта, можно сделать это:
using( ISession s = .... )
{
s.Delete ("from MyEntityName e");
s.Flush();
}
Offcourse, существует недостаток с этим методом, и это - то, что NHibernate сначала выберет объекты прежде, чем удалить их.
Я решил эту проблему следующим образом:
from cProfile import Profile
from django.core.management.base import BaseCommand
class Command(BaseCommand):
...
def _handle(self, *args, **options):
# Actual code I want to profile
pass
def handle(self, *args, **options):
if options['profile']:
profiler = Profile()
profiler.runcall(self._handle, *args, **options)
profiler.print_stats()
else:
self._handle(*args, **options)
Таким образом, статистика профилирования собирается в рамках _handle
. Поэтому вместо:
python -m cProfile manage.py testrender
мне придется запустить:
python manage.py testrender --profile
, что даже лучше.
Если я не могу найду любые ответы. Gprof2Dot как объяснено здесь может быть приемлемым взломом.
Он не отфильтровывает модули, которые мне не интересны, но, надеюсь, это упростит визуальную проверку результатов разделяя мой код и модули Django.
Разделите функциональность PIL на ее собственную функцию / класс в собственном модуле и импортируйте ее из своей команды управления. Затем вы можете протестировать / профилировать функциональность PIL независимо от Django.