gpt4 book ai didi

使用 line_profiler 进行 Python 分析 - 即时删除 @profile 语句的巧妙方法?

转载 作者:太空狗 更新时间:2023-10-29 17:24:49 33 4
gpt4 key购买 nike

我想用优秀的line_profiler ,但只是在某些时候。为了让它工作,我添加了

@profile

在每个函数调用之前,例如

@profile
def myFunc(args):
blah
return

并执行

kernprof.py -l -v mycode.py args

但我不想每次都手动添加 @profile 装饰器,因为大多数时候我想在没有它们的情况下执行代码,如果我尝试将它们包括在内,例如

mycode.py args

是否有一种快乐的媒介,我可以根据某些条件切换/参数动态删除装饰器,而无需手动操作和/或过多地修改每个函数?

最佳答案

而不是删除 @profile装饰线,提供您自己的直通无操作版本。

您可以在项目的某处添加以下代码:

try:
# Python 2
import __builtin__ as builtins
except ImportError:
# Python 3
import builtins

try:
builtins.profile
except AttributeError:
# No line profiler, provide a pass-through version
def profile(func): return func
builtins.profile = profile

在使用 @profile 的任何代码之前导入它装饰器,您可以在线路分析器处于事件状态或不处于事件状态的情况下使用代码。

因为虚拟装饰器是一个传递函数,执行性能不会受到影响(只有导入性能受到非常轻微的影响)。

如果你不喜欢搞乱内置插件,你可以把它做成一个单独的模块;说 profile_support.py :

try:
# Python 2
import __builtin__ as builtins
except ImportError:
# Python 3
import builtins

try:
profile = builtins.profile
except AttributeError:
# No line profiler, provide a pass-through version
def profile(func): return func

(没有分配builtins.profile)并使用from profile_support import profile在任何使用 @profile 的模块中装饰器。

关于使用 line_profiler 进行 Python 分析 - 即时删除 @profile 语句的巧妙方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18229628/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com