Как представить Django пользовательская команда управления исключительно

В TearDown моего UnitTests я главным образом делаю это:

using( ISession s = ... )
{
   s.Delete ("from Object o");
   s.Flush();
}

Это должно удалить все объекты. Если Вы хотите удалить все экземпляры одного определенного объекта, можно сделать это:

using( ISession s = .... )
{
    s.Delete ("from MyEntityName e");
    s.Flush();
}

Offcourse, существует недостаток с этим методом, и это - то, что NHibernate сначала выберет объекты прежде, чем удалить их.

9
задан muhuk 6 November 2009 в 11:54
поделиться

3 ответа

Я решил эту проблему следующим образом:

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

, что даже лучше.

17
ответ дан 4 December 2019 в 12:19
поделиться

Если я не могу найду любые ответы. Gprof2Dot как объяснено здесь может быть приемлемым взломом.

Он не отфильтровывает модули, которые мне не интересны, но, надеюсь, это упростит визуальную проверку результатов разделяя мой код и модули Django.

0
ответ дан 4 December 2019 в 12:19
поделиться

Разделите функциональность PIL на ее собственную функцию / класс в собственном модуле и импортируйте ее из своей команды управления. Затем вы можете протестировать / профилировать функциональность PIL независимо от Django.

0
ответ дан 4 December 2019 в 12:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: