Сохранение данных в файл cProfile приводит к путанице символов - PullRequest
40 голосов
/ 27 ноября 2011

Я использую cProfile для модуля с именем bot4CA.py, поэтому в консоли я набираю:

python -m cProfile -o thing.txt bot4CA.py

После того, как модуль запускается и выходит, он создает файл thing.txt и когда я его открываю, там есть некоторая информация, а остальное - беспорядочный набор символов вместо аккуратно организованного файла данных, что я и хочу.Кто-нибудь знает, как использовать cProfile и получить аккуратно организованную таблицу данных, как при обычном использовании в командной строке, кроме файла?Вот пример некоторых данных в файле .txt:

{(   s)   build\bdist.win32\egg\colorama\winterm.pyi'   t      reset_all(   i   i   gpàÂs% ?geOÙHÌœE?{(   s-   build\bdist.win32\egg\colorama\ansitowin32.pyi¥

Что мне действительно нужно, так это то, что происходит, когда вы вызываете cProfile.run (), в результате чего печатается аккуратно организованная таблица, показывающая время выполненияиз всех функций, кроме напечатанных, сохраняются в файле, так как эта программа довольно большая и выполняет много функций.

Ответы [ 2 ]

56 голосов
/ 27 ноября 2011

Вы должны использовать модуль pstats, чтобы проанализировать этот файл и извлечь из него информацию в удобном для пользователя формате. Например:

import pstats
p = pstats.Stats('thing.txt')
p.sort_stats('cumulative').print_stats(10)

Это все в документации , конечно. Перейдите к «мгновенному руководству пользователя», там все объясняется.

7 голосов
/ 15 ноября 2018

чтобы сбросить статистику:

echo 'stats' | python3 -m pstats path/to/cprofile_output_file

pstats также имеет оболочку

$ python3 -m pstats path/to/cprofile_output_file

внутри мы можем выдать команды stats или sort, например, так:

$ python3 -m pstats path/to/cprofile_output_file
Welcome to the profile statistics browser.
prof.txt% sort cumtime
prof.txt% reverse
prof.txt% stats

   Ordered by: standard name

   ncalls  tottime  percall  cumtime  percall filename:lineno(function)
        1    0.000    0.000    0.000    0.000 63:1(<module>)
        1    0.000    0.000    0.000    0.000 {built-in method builtins.exec}
        1    0.000    0.000    0.000    0.000 {built-in method builtins.print}
        1    0.000    0.000    0.000    0.000 {method 'disable' of '_lsprof.Profiler' objects}

prof.txt% ?

Documented commands (type help <topic>):
========================================
EOF  add  callees  callers  help  quit  read  reverse  sort  stats  strip

Микро-функция, которая мне здесь понравилась, заключается в том, что я могу полностью изменить порядок сортировки <3 </p>

echo -e 'sort cumtime\nreverse\nstats' | python3 -m pstats path/to/cprofile_output_file
...