Профилирование Python в Eclipse

Эти вопросы полу-основаны на этом:

Как вы можете профилировать python script?

Я думал, что это будет отличная идея для запуска некоторых из моих программ. Хотя профилирование из командного файла, как объяснено в вышеупомянутом ответе, возможно, я думаю, было бы еще лучше иметь этот параметр в Eclipse. В то же время, делая мою всю программу функцией и профилированием, это будет означать, что мне нужно изменить исходный код?

Как настроить eclipse таким образом, чтобы у меня была возможность запускать команду профиля в моих существующих программах?

Любые советы или предложения приветствуются!

Ответ 1

если вы будете следовать общей идиоме python, чтобы сделать весь свой код, даже "существующие программы", импортируемые в виде модулей, вы могли бы сделать именно то, что вы описали, без каких-либо дополнительных проблем.

вот конкретная идиома, о которой я говорю, которая превращает ваш программный поток "вверх дном", так как __name__ == '__main__' будет помещен в нижней части файла, как только все ваши def будут выполнены:

# program.py file

def foo():
    """ analogous to a main().  do something here """
    pass

# ... fill in rest of function def here ...

# here is where the code execution and control flow will
# actually originate for your code, when program.py is
# invoked as a program.  a very common Pythonism...
if __name__ == '__main__':
    foo()

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

Так как есть другие преимущества, связанные с тем, что вы программируете также модуль, вы обнаружите, что большинство скриптов python на самом деле делают это таким образом. Одно из преимуществ этого: все, что вы пишете, потенциально можно использовать в форме модуля, включая cProfile -инг вашего foo().

Ответ 2

Вы всегда можете создавать отдельные модули, которые просто профилируют определенные вещи в других ваших модулях. Вы можете организовывать такие модули в отдельном пакете. Таким образом, вы не изменяете существующий код.