У меня есть конкретный вопрос относительно использования профилировщика. Я плохо знаком с программированием Python, я пытаюсь представить функцию, которую я хочу вызвать как метод класса, что-то вроде этого
import profile
class Class:
def doSomething():
do here ..
def callMethod():
self.doSomething()
вместо этого я хочу использовать
profile.run(self.doSomething())
но profile.run
ожидает строку в нем, и я получаю ошибку
TypeError: exec: arg 1 must be a string, file, or code object
Кто-то может помочь?
Спасибо
Исправлено !!!
Вместо профиля я использовал модуль cProfile, который, согласно документации python, имеет гораздо меньшие накладные расходы
Ссылка: http://docs.python.org/library/profile.html#introduction-to-the -profilers
с cProfiler, можно передать локальные и глобальные параметры, используя модуль runctx поэтому для той же проблемы я сделал следующее:
import cProfile
cProfile.runctx('self.doSomething()',globals(),locals())
, и это сработало :)
также, если у вас есть дополнительные параметры, вы можете указать
import cProfile
cProfile.runctx('self.doSomething(x,y,z)',globals(),locals())
Спасибо за помощь
Вам необходимо исправить различные неточности (отсутствует self
, говорят, что вы используете методы класса, когда в поле зрения нет classmethod
, не удается наследовать от объекта
, ...) затем сделайте profile
счастливым, предоставив ему строку, которую он хочет - и имя экземпляра должно быть глобально видимым, чтобы profile
действительно мог использовать эту строку . Например:
import profile
import time
class Class(object):
def doSomething(self):
time.sleep(0.1)
def callMethod(self):
global _o
_o = self
profile.run('_o.doSomething()')
o = Class()
o.callMethod()