在python中将函数传递给cProfile的正确方法是什么?



我正在尝试使用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))

我之前遇到过类似的问题,我实际上并没有将函数作为参数传递,而是调用函数并将结果(这是一个元组(传递给内置函数,根据文档,内置函数需要一个函数传递给它。

这里是否是同样的问题,如果是,我该如何解决(我上次从未弄清楚(

干杯

为此,以及大多数类似的函数,您将函数本身(未调用(传递给函数,然后将参数作为参数传递给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)

相关内容