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

在python中,向cProfile传递函数的正确方法是什么?,python,benchmarking,cprofile,Python,Benchmarking,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.prin

我正在尝试使用
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\u tau\u leapping
函数进行基准测试,该函数的输入都是数组,除了
property\u calc
是函数、
epsi
delta\u 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
文件“c:/Users/Mike/visualstudio代码项目/MSc论文代码/tau_leapping_variant_ssa.py”,第190行,在
配置文件.runcall(gillespie_tau_跳跃(倾向计算、人口数量、LHS、stoch_比率、人口数量、tao_all、rxn_向量、delta_t、tao、epsi))
TypeError:“tuple”对象不可调用
在线
profile.runcall(gillespie\u tau\u跳跃(倾向计算、人口数量、LHS、stoch\u比率、人口数量、tao\u all、rxn\u向量、delta\u 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)

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

是否可以
runcall()
输出到文件?文档中说:“您可以通过为
run()
函数指定文件名,将结果保存到文件中,而不是在概要文件运行结束时打印输出。”。
runcall()
是否有类似的功能?文档中几乎没有提到它,两个函数的源代码似乎都没有表明文件路径已被接受。@Kurtheeler:是的,
profile.run
(模块级函数)是对
profile.profile
对象的各种方法的包装。AFAICT,
profile.run
,当传递一个
filename
参数时,大致相当于创建一个
profile.profile
,在其上调用
.run
(不接受
filename
参数),然后在其上调用
.dump\u stats(filename)
。您可以手动执行相同的操作,将
.run
调用替换为
.runcall
调用。是否可以
runcall()
输出到文件?文档中说:“您可以通过为
run()
函数指定文件名,将结果保存到文件中,而不是在概要文件运行结束时打印输出。”。
runcall()
是否有类似的功能?文档中几乎没有提到它,两个函数的源代码似乎都没有表明文件路径已被接受。@Kurtheeler:是的,
profile.run
(模块级函数)是对
profile.profile
对象的各种方法的包装。AFAICT,
profile.run
,当传递一个
filename
参数时,大致相当于创建一个
profile.profile
,在其上调用
.run
(不接受
filename
参数),然后在其上调用
.dump\u stats(filename)
。您可以手动执行相同的操作,将
.run
调用替换为
.runcall
调用。