Профильный Python C расширения

Я разработал C-расширение Python, которое получает данные из Python, и вычислите некоторый CPU интенсивные вычисления. Возможно представить C-расширение?

Проблема здесь состоит в том, что запись демонстрационного теста в C, который будет представлен, была бы сложна, потому что код полагается на конкретные исходные данные и структуры данных (сгенерированный кодом управления Python).

У Вас есть какие-либо предложения?

36
задан pygabriel 10 April 2010 в 21:54
поделиться

2 ответа

Я нашел свой путь, используя google-perftools . Хитрость заключалась в том, чтобы обернуть функции StartProfiler и StopProfiler в python (в моем случае через cython).

Для профилирования расширения C достаточно обернуть код Python внутри вызовов StartProfiler и StopProfiler.

from google_perftools_wrapped import StartProfiler, StopProfiler
import c_extension # extension to profile c_extension.so

StartProfiler("output.prof")
... calling the interesting functions from the C extension module ...
StopProfiler()

Затем для анализа, например, вы можете экспортировать в формате callgrind и увидеть результат в kcachegrind:

pprof --callgrind c_extension.so output.prof > output.callgrind 
kcachegrind output.callgrind
19
ответ дан 27 November 2019 в 06:04
поделиться

С помощью gprof вы можете профилировать любую программу, которая была правильно скомпилирована и связана ( gcc -pg и т. Д., В gprof ' s случае). Если вы используете версию Python, не созданную с помощью gcc (например, предварительно скомпилированную версию Windows, распространяемую PSF), вам необходимо изучить, какие эквивалентные инструменты существуют для этой платформы и набора инструментов (в Windows PSF случай, возможно, mingw может помочь). Там могут быть "нерелевантные" данные (внутренние функции C в среде выполнения Python), и если да, то проценты, показанные gprof , могут быть неприменимы, но абсолютные числа (вызовов и продолжительности) из этого) по-прежнему действительны, и вы можете постобработать вывод gprof (например, с помощью небольшого скрипта Python ;-), чтобы исключить нерелевантные данные и вычислить желаемые проценты.

4
ответ дан 27 November 2019 в 06:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: