Как удалить целое дерево вызовов из 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.*'])
Другие вопросы по тегам