Profiling and Tracing

Profiling and Tracing#

The profiling and call tracing tools mentioned above have a similar programmatic interface, even though most of the time they will only be used in command-line mode. However, if you really want to customize the set of methods that are to be profiled or traced, see the following example.

    # for performance profiling
    from openmdao.devtools import iprofile as tool

    # OR for call tracing
    # from openmdao.devtools import itrace as tool

    # First, make sure that the classes I use to define my method set exist in this
    # namespace.
    from mystuff import MyClass, MyOtherClass

    # Let's say I only want to track methods with 'foo' or 'bar' in the name that belong to
    # MyClass and ones with 'baz' in the name that belong to either MyClass or MyOtherClass.
    # I use the following glob patterns and tuples of classes to specify this.
    methods = [
        ('*foo*', (MyClass,)),
        ('*bar*', (MyClass,)),
        ('*baz*', (MyClass, MyOtherClass))
    ]

    # set up the tool using my custom method set
    tool.setup(methods=methods)

    tool.start()

    # run the code I want to profile/trace...

    tool.stop()

    # do some other stuff that I don't want to profile/trace...