Не могу понять, как вызвать CPROFIL внутри программы

StackOverflow https://stackoverflow.com/questions/3489769

Вопрос

Извините за новый вопрос, но я не могу понять CPROFIL (я действительно новичок в Python)

Я могу запустить его через мой терминал с:

python -m cProfile myscript.py

Но мне нужно запустить его на веб-сервере, поэтому я хотел бы поставить команду в сценарии, на которую он будет смотреть. Как бы я сделал это? Я видел вещи, используя такие термины, как __init__ and __main__ Но я не очень понимаю, что это.

Я знаю, что это просто, я просто все еще пытаюсь узнать все, и я знаю, что есть кто-то, кто будет знать это.

Заранее спасибо! Я ценю его.

Это было полезно?

Решение

Я думаю, что вы видели такие идеи:

if __name__ == "__main__":
    # do something if this script is invoked
    # as python scriptname. Otherwise, gets ignored.

Что происходит, когда вы называете Python в скрипте, этот файл имеет атрибут __name__ установлен в "__main__" Если это файл непосредственно вызывается исполняемым Python. В противном случае (если он не вызывается непосредственно), он импортируется.

Теперь вы можете использовать этот трюк на ваших сценариях, если вам нужно, например, предполагая, что у вас есть:

def somescriptfunc():
    # does something
    pass


if __name__ == "__main__":
    # do something if this script is invoked
    # as python scriptname. Otherwise, gets ignored.

    import cProfile
    cProfile.run('somescriptfunc()')

Это меняет ваш скрипт. При импортировании его функции членов классы и т. Д. Могут быть использованы как обычно. Когда бежать Из командной строки он сам профили.

Это то, что вы ищете?


От комментариев я собрал больше, возможно, нужно, поэтому здесь идет:

Если вы запускаете скрипт от изменений CGI, это форма:

# do some stuff to extract the parameters
# do something with the parameters
# return the response.

Когда я говорю абстрактное, вы можете сделать это:

def do_something_with_parameters(param1, param2):
    pass

if __name__ = "__main__":
    import cProfile
    cProfile.run('do_something_with_parameters(param1=\'sometestvalue\')')

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

Теперь для вашего сценария CGI создайте сценарий, который делает:

import {insert name of script from above here}

# do something to determine parameter values
# do something with them *via the function*:
do_something_with_parameters(param1=..., param2=...)
# return something

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

Вероятно, можно добиться этого, но это будет работать.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top