Как удалить целое дерево вызовов из pycallgraph с помощью фильтра
Я хочу посмотреть, что происходит с определенной операцией в пакете python3, над которым я работал. Я использую pycallgraph, и это выглядит великолепно. Но я не могу понять, как удалить все дерево вызовов из вывода.
Я сделал быстрый скрипт make_call_graphs.py
:
import doms.client.schedule as sched
from pycallgraph import PyCallGraph
from pycallgraph.output import GraphvizOutput
from pycallgraph import Config
from pycallgraph import GlobbingFilter
config = Config()
config.trace_filter = GlobbingFilter(exclude=[
'_find_and_load',
'_find_and_load.*', # Tried a few similar variations
'_handle_fromlist',
'_handle_fromlist.*',
])
with PyCallGraph(output=GraphvizOutput(output_file='schedule_hourly_call_graph.png'), config=config):
sched.hourly()
Прежде чем я начал использовать GlobbingFilter
, _find_and_load
был на вершине дерева за пределами моего doms
стек вызовов библиотеки. Кажется, что фильтр удаляет только блок верхнего уровня, но каждый последующий вызов остается в выводе. (См. ДО и ПОСЛЕ ниже)
Очевидно, что я могу прочитать результат и скопировать каждый отдельный вызов, который я не хочу видеть в фильтре, но это глупо. Что я могу сделать, чтобы удалить весь этот кусок материала за пределами моего doms
коробка? Есть ли RecursiveFilter
или что-то, что я мог бы использовать?
1 ответ
Решение оказалось намного проще, чем я думал, и прямо передо мной: include
Kwarg дано GlobbingFilter
,
config.trace_filter = GlobbingFilter(include=['__main__', 'doms.*'])