# profile/cProfile



John Melesky
(PDX Python, May 2010)
---
# In the standard library

- hotshot
- timeit
- profile/cprofile/pstats
---
# hotshot

---
# timeit

---
# profile/cProfile

Instead of:

    if __name__ == '__main__':
        main()

Do:

    if __name__ == '__main__':
        import cProfile
        cProfile.run('main()')

---
# Questions?
---
# Need more detail!
---
# Need more detail!

Instead of:

    if __name__ == '__main__':
        import cProfile
        cProfile.run('main()')

Do:

    if __name__ == '__main__':
        import cProfile
        cProfile.run('main()', 'myinfo.prof')

---
# side note

If you need to set up an environment, you can use `cProfile.runctx(command, globals, locals)`.
---
# Need more detail!

Then:

    #!/usr/bin/env python
    
    import pstats
    
    p = pstats.Stats('myinfo.prof')
    p.strip_dirs().sort_stats("time").print_stats(50)
---
# pstats

- `strip_dirs`
- `sort_stats`: "calls", "cumulative", "pcalls", "time", etc
- `print_stats`: restrictable (number of rows, regular expression)
---
# pstats

Also:

- `print_callers`
- `print_callees`
- `reverse_order`
- `dump_stats`
---
# pstats

Finally:

- `add`
---
# Whine whine whine

It's only usable from the command line!
---
# It's been wrapped

See, for example, [repoze.profile](http://pypi.python.org/pypi/repoze.profile).
---
# Questions?
---
---
