Как профилировать код Python, вызываемый другим скриптом Python? - PullRequest
0 голосов
/ 20 октября 2018
$ cat calc_pi.pyx
# cython: profile=True
# cython: language_level=3
# cython linetrace=True

# calc_pi.pyx

cimport cython

@cython.profile(False)
def recip_square(int i):
    return 1. / i ** 2

def approx_pi(int n=10000000):
    cdef double val = 0.
    cdef int k
    for k in range(1, n + 1):
        val += recip_square(k)
    return (6 * val) ** .5

$ cat runme.py
import calc_pi
import argparse

def main():
    parser = argparse.ArgumentParser(prog='{0}'.format(__file__))
    parser.add_argument("-i", "--index", help="specify number", type=int)
    args = parser.parse_args()
    num = int(args.index)
    print(calc_pi.approx_pi(num))

if __name__ == "__main__":
    main()

Вопрос> Я видел, как профилировать отдельные функции Cython, такие как calc_pi.approx_pi.Однако у меня есть проблемы с профилированием этих функций с помощью вызывающего скрипта Python.

Например, предположим, что вы не можете напрямую профилировать функцию calc_pi.approx_pi, потому что вам нужны некоторые параметры / предварительная обработка из скрипта Python (т.е. runme.py).

Есть ли способ, которым я могу профилировать calc_pi.approx_pi через вызов runme.py?

Спасибо

...