Python cProfile - 装饰函数模糊了配置文件可视化
Python cProfile - decorated functions obscuring profile visualization
我有一个带有 @classmethod
的基础 class,它充当许多后代 classes 中大量方法的装饰器。
class BaseClass():
@classmethod
def some_decorator(cls, method):
@wraps(method)
def inner_method(self, *args, **kwargs):
# do stuff
return method(self, *args, **kwargs)
return inner_method
class ChildClass(BaseClass):
@BaseClass.some_decorator
def some_child_method(self):
# do other stuff
return
当我剖析这段代码并通过树视图查看它时,我看到来自数百个不同地方的数千次对 some_decorator
的调用。
然后我看到 some_decorator
回拨到它刚刚来自的数百个地方。
这很烦人,我还没有想出解决办法,既不是通过更改代码,也不是通过不同的方式进行分析。 (使用 gprof2dot atm:How can you get the call tree with python profilers?)
想法?
有很多方法可以构建装饰器来保存 docs/signatures。 wrapt 库为此提供了很多功能。
https://wrapt.readthedocs.io/en/latest/decorators.html#decorating-class-methods
它最终看起来像这样:
class BaseClass():
@wrapt.decorator
@classmethod
def some_decorator(cls, method, instance, *args, *kwargs):
# do stuff
return method(instance, *args, **kwargs)
我有一个带有 @classmethod
的基础 class,它充当许多后代 classes 中大量方法的装饰器。
class BaseClass():
@classmethod
def some_decorator(cls, method):
@wraps(method)
def inner_method(self, *args, **kwargs):
# do stuff
return method(self, *args, **kwargs)
return inner_method
class ChildClass(BaseClass):
@BaseClass.some_decorator
def some_child_method(self):
# do other stuff
return
当我剖析这段代码并通过树视图查看它时,我看到来自数百个不同地方的数千次对 some_decorator
的调用。
然后我看到 some_decorator
回拨到它刚刚来自的数百个地方。
这很烦人,我还没有想出解决办法,既不是通过更改代码,也不是通过不同的方式进行分析。 (使用 gprof2dot atm:How can you get the call tree with python profilers?)
想法?
有很多方法可以构建装饰器来保存 docs/signatures。 wrapt 库为此提供了很多功能。
https://wrapt.readthedocs.io/en/latest/decorators.html#decorating-class-methods
它最终看起来像这样:
class BaseClass():
@wrapt.decorator
@classmethod
def some_decorator(cls, method, instance, *args, *kwargs):
# do stuff
return method(instance, *args, **kwargs)