профилировщик ipython - PullRequest
       8

профилировщик ipython

0 голосов
/ 19 февраля 2012

У меня есть код на python, который работает, но, к сожалению, очень медленный.Кто-то из #python предложил мне запустить код через профилировщик, чтобы увидеть строки и функции, в которых код занимал больше всего времени.

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

cat input | python pythonsource.py 

Проблема в том, что когда я пытаюсь запустить профилировщик в ipython, я не могу найти способ перенаправить ввод в код Python,В оболочке ipython я попытался

run -p -l 1.0 pythonsource.py input (didn't work. simply waits at STDIN for input)
run -p -l 1.0 pythonsource.py << input (didn't work)
run -p -l 1.0 cat input | python pythonsource.py (didn't work.)

. Я не уверен, как это сделать. Я могу заставить команду ipython profiler перенаправить ввод в STDIN для чтения из питонского источника.Может кто-нибудь сказать, пожалуйста, как это исправить?Или я правильно понял?Может быть, есть какой-то другой более чистый, более умный способ профилирования кода Python?

И, может быть, то, что я спрашиваю дальше, должно быть частью другого вопроса ... но мне было интересно, что означает ipython, когда он ссылается на "примитив"звонки "в некоторых выходных данных профайлера ipython?

Спасибо.

1 Ответ

0 голосов
/ 19 февраля 2012

Правильный способ перенаправления ввода на командной строке выглядит следующим образом:

cat input | run -p -l 1.0 python pythonsource.py

run -p -l 1.0 python pythonsource.py < input

Синтаксис << string создает «здесь документ», но не перенаправляет ввод.

В приглашении python (и, надеюсь, в ipython) вы можете перенаправить стандартный ввод следующим образом:

import sys
save_stdin = sys.stdin
sys.stdin = open('input')
run -p <etc.>
sys.stdin = save_stdin # Restore the real stdin

Или (рекомендуется) вы можете переписать свой источник для работы с именем файла: если вы называете его следующим образом, «input» будет в sys.argv[1], и вы можете открыть его и прочитать из него:

python pythonsource.py input
...