Не могу понять, как вызвать CPROFIL внутри программы
Вопрос
Извините за новый вопрос, но я не могу понять 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
Затем вы можете профилировать функцию, используя составляющие значения на вашем рабочем столе, вдали от производственного сервера.
Вероятно, можно добиться этого, но это будет работать.