Как правильно передать функцию в cProfile в python? - PullRequest
0 голосов
/ 18 июня 2020

Я пытаюсь протестировать свой код, используя библиотеки cProfile и pstats. Это код, который у меня есть на данный момент:

profile = cProfile.Profile()
profile.runcall(gillespie_tau_leaping(propensity_calc, popul_num, LHS, stoch_rate, popul_num_all, tao_all, rxn_vector, delta_t, tao, epsi))
ps = pstats.Stats(profile)
ps.print_stats()

Я пытаюсь протестировать функцию gillespie_tau_leaping, все входные данные которой представляют собой массивы, кроме propensity_calc, которая является функцией, epsi и delta_t, которые являются константами.

Только сейчас я получаю следующую ошибку:

File "c:/Users/Mike/visual studio code project/MSc dissertation code/tau_leaping_variant_ssa.py", line 190, in <module>
profile.runcall(gillespie_tau_leaping(propensity_calc, popul_num, LHS, stoch_rate, popul_num_all, tao_all, rxn_vector, delta_t, tao, epsi))
TypeError: 'tuple' object is not callable

В строке profile.runcall(gillespie_tau_leaping(propensity_calc, popul_num, LHS, stoch_rate, popul_num_all, tao_all, rxn_vector, delta_t, tao, epsi))

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

Это та же проблема, и если да, то как мне это исправить (в прошлый раз я так и не понял)

Ура

1 Ответ

1 голос
/ 18 июня 2020

Для этого и большинства подобных функций вы передаете саму функцию без вызова, а затем аргументы функции в качестве аргументов функции runcall; задокументировано , чтобы взять func, за которым следуют varargs и kwargs (*args и **kwargs). Все, что вы меняете, - это удаляем скобки вызова для функции и ставим запятую после функции, чтобы отделить ее от ее аргументов:

profile.runcall(gillespie_tau_leaping, propensity_calc, popul_num, LHS, stoch_rate, popul_num_all, tao_all, rxn_vector, delta_t, tao, epsi)
...