вопрос импорта модуля Python - PullRequest
0 голосов
/ 01 декабря 2010

Итак, у меня большой проект со многими модулями, и я хочу запустить его профилирование.У меня есть модуль профиля, который в основном просто предоставляет декоратор, который я могу добавить в функцию для профилирования его при вызове.

Проблема в том, что мне придется импортировать этот модуль в десятки модулей, которые яиметь.Я думаю, это нормально, но я не могу передать код с импортированными модулями профилирования или декоратором функций для контроля версий.Это означает, что каждый раз, когда я импортирую / экспортирую, мне нужно добавлять / удалять весь мой код профилирования.

Существует ли какая-либо система для управления этим добавлением / удалением кода профилирования без ручного импорта / удаления модулей в каждоммодуль моего проекта?Мы используем Mercurial, но я не могу по-настоящему возиться с настройками Mercurial или создать ветку.

Ответы [ 2 ]

2 голосов
/ 01 декабря 2010

Вы можете создать свой модуль профилирования так, чтобы он импортировал другие модули и аннотировал их функции:

# these are the modules you want to profile
import foo
import huh

# This is a profiling function
# yours would do something smarter
def profile(f):
    def gotcha(*args, **kwds):
        print "before"
        result = f(*args, **kwds)
        print "after"
        return result
    return gotcha

# these are the functions in those modules that you
# want to profile.  Each one is patched here instead
# of decorated there.
foo.bar = profile(foo.bar)
huh.baz = profile(huh.baz)
huh.hmm = profile(huh.hmm)

Таким образом, вам не нужно изменять эти модули, но если вы решите импортировать это профилированиемодуль где угодно во время выполнения, он будет «исправлять» все остальные модули так, как вы хотите

Вы должны иметь возможность декорировать методы класса аналогично.

0 голосов
/ 01 декабря 2010

Почему бы просто не создать ветку со всеми изменениями профилирования, а затем объединить ветку, когда вы хотите протестировать ... и потом все вернуть обратно., но использование веток не должно быть значительно сложнее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...