Использование профилировщика Python с объектами

У меня есть конкретный вопрос относительно использования профилировщика. Я плохо знаком с программированием 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

Кто-то может помочь?

Спасибо

5
задан SilentGhost 29 June 2010 в 16:56
поделиться

2 ответа

Исправлено !!!

Вместо профиля я использовал модуль 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())

Спасибо за помощь

11
ответ дан 18 December 2019 в 13:10
поделиться

Вам необходимо исправить различные неточности (отсутствует 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()
3
ответ дан 18 December 2019 в 13:10
поделиться
Другие вопросы по тегам:

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