Skip to main content

A debugging and profiling tool that can trace and visualize python code execution

Project description

VizTracer

build pypi support-version license commit

VizTracer is a low-overhead deterministic debugging/profiling tool that can trace and visualize your python code to help you intuitively understand your code better and figure out the time consuming part of your code.

You can take a look at the demo result of multiple example programs(sort algorithms, mcts, modulo algorithms, multithread tracing, etc.)

example_img

trace viewer is used to display the stand alone html data.

VizTracer also supports json output that complies with Chrome trace event format, which can be loaded using perfetto

VizTracer generates HTML report for flamegraph using d3-flamegraph

Highlights

  • Lower overhead than cProfile, more accurate on actual time consumed
  • Detailed function entry/exit information on timeline, not just summary of time used
  • Super easy to use, no source code change for basic usage, no package dependency
  • Optional function filter to ignore functions you are not interested
  • Customize events to log and track data through time
  • Stand alone HTML report with powerful front-end, or chrome-compatible json
  • Works on Linux/MacOS/Windows

Install

The prefered way to install VizTracer is via pip

pip install viztracer

You can also download the source code and build it yourself.

Usage

There are a couple ways to use VizTracer

Command Line

The easiest way to use VizTracer is through command line. Assume you have a python script to profile and the normal way to run it is:

python3 my_script.py arg1 arg2

You can simply use VizTracer as

python3 -m viztracer my_script.py arg1 arg2
# OR
viztracer my_script arg1 arg2

which will generate a result.html file in the directory you run this command. Open it in browser and there's your result.

You can also generate json file or gz file and load it with chrome://tracing/ or perfetto. gz file is especially helpful when your trace file is large

python3 -m viztracer -o result.json my_script.py arg1 arg2
python3 -m viztracer -o result.json.gz my_script.py arg1 arg2

By default, VizTracer only generates trace file, either in HTML format or json. You can have VizTracer to generate a flamegraph as well by

python3 -m viztracer --save_flamegraph my_script.py

Inline

Sometimes the command line may not work as you expected, or you do not want to profile the whole script. You can manually start/stop the profiling in your script as well.

from viztracer import VizTracer

tracer = VizTracer()
tracer.start()
# Something happens here
tracer.stop()
tracer.save() # also takes output_file as an optional argument

Or, you can do it with with statement

with VizTracer(output_file="optional.html") as tracer:
    # Something happens here

Display Result

By default, VizTracer will generate a stand alone HTML file which you can simply open with Chrome(maybe Firefox?). The front-end uses trace-viewer to show all the data.

However, you can generate json file as well, which complies to the chrome trace event format. You can load the json file on perfetto, which will replace the deprecated trace viewer in the future. Or you can use chrome://tracing to load the file.

At the moment, perfetto does not support locally stand alone HTML file generation and it has some bugs, so I'm not able to switch completely to it. The good news is that once you load the perfetto page, you can use it even when you are offline.

When you are dealing with big traces, a stand alone HTML file might be very large and hard to load. You should try to dump a compressed filename.json.gz file and load it via chrome://tracing/ or perfetto

Trace Filter

Sometimes your code is really complicated or you need to run you program for a long time, which means the parsing time would be too long and the HTML/JSON file would be too large. There are ways in VizTracer to filter out the data you don't need.

The filter works at tracing time, not parsing time. That means, using filters will introduce some extra overhead while your tracing, but will save significant memory, parsing time and disk space.

VizTracer support:

  • max stack depth
  • include files
  • exclude files
  • ignore c function

Add Custom Event

VizTracer supports inserting custom events while the program is running. This works like a print debug, but you can know when this print happens while looking at trace data.

VizTracer has:

  • Instant Event
  • Counter Event
  • Object Event

Multi Thread Support

VizTracer supports python native threading module without the need to do any modification to your code. Just start VizTracer before you create threads and it will just work.

example_img

Multi Process Support

VizTracer can support multi process with some extra steps. The current structure of VizTracer keeps one single buffer for one process, which means the user will have to produce multiple results from multiple processes and combine them together.

JSON alternative

VizTracer needs to dump the internal data to json format. It is recommended for the users to install orjson, which is much faster than the builtin json library. VizTracer will try to import orjson and fall back to the builtin json library if orjson does not exist.

Performance

Overhead is a big consideration when people choose profilers. VizTracer has a better overhead performance than native cProfiler. In the worst case(Pure FEE) VizTracer is about the same as cProfile and in more practical cases VizTracer performs much better.

This is because VizTracer collects less information than cProfile, and optimized the hook function with a lot of efforts.

An example run for test_performance with Python 3.8 / Ubuntu 18.04.4 on Github VM

fib:
0.000678067(1.00)[origin] 
0.019880272(29.32)[py] 0.011103901(16.38)[parse] 0.021165599(31.21)[json] 
0.001344933(1.98)[c] 0.008181911(12.07)[parse] 0.015789866(23.29)[json] 
0.001472846(2.17)[cProfile]  

hanoi     (6148, 4100):
0.000550255(1.00)[origin] 
0.016343521(29.70)[py] 0.007299123(13.26)[parse] 0.016779364(30.49)[json] 
0.001062505(1.93)[c] 0.006416136(11.66)[parse] 0.011463236(20.83)[json] 
0.001144914(2.08)[cProfile] 

qsort     (8289, 5377):
0.002817679(1.00)[origin] 
0.052747431(18.72)[py] 0.011339725(4.02)[parse] 0.023644345(8.39)[json] 
0.004767673(1.69)[c] 0.008735166(3.10)[parse] 0.017173703(6.09)[json] 
0.007248019(2.57)[cProfile] 

slow_fib  (1135, 758):
0.028759652(1.00)[origin] 
0.033994071(1.18)[py] 0.001630461(0.06)[parse] 0.003386635(0.12)[json] 
0.029481623(1.03)[c] 0.001152415(0.04)[parse] 0.002191417(0.08)[json] 
0.028289305(0.98)[cProfile] 

Documentation

For full documentation, please see https://viztracer.readthedocs.io/en/stable

Bugs/Requests

Please send bug reports and feature requests through github issue tracker. VizTracer is currently under development now and it's open to any constructive suggestions.

License

Copyright Tian Gao, 2020.

Distributed under the terms of the Apache 2.0 license.

Project details


Release history Release notifications | RSS feed

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

viztracer-0.4.1.tar.gz (663.0 kB view details)

Uploaded Source

Built Distributions

viztracer-0.4.1-cp38-cp38-win_amd64.whl (671.2 kB view details)

Uploaded CPython 3.8 Windows x86-64

viztracer-0.4.1-cp38-cp38-manylinux2010_x86_64.whl (697.3 kB view details)

Uploaded CPython 3.8 manylinux: glibc 2.12+ x86-64

viztracer-0.4.1-cp38-cp38-manylinux1_x86_64.whl (697.3 kB view details)

Uploaded CPython 3.8

viztracer-0.4.1-cp38-cp38-macosx_10_14_x86_64.whl (668.0 kB view details)

Uploaded CPython 3.8 macOS 10.14+ x86-64

viztracer-0.4.1-cp37-cp37m-win_amd64.whl (671.1 kB view details)

Uploaded CPython 3.7m Windows x86-64

viztracer-0.4.1-cp37-cp37m-manylinux2010_x86_64.whl (694.2 kB view details)

Uploaded CPython 3.7m manylinux: glibc 2.12+ x86-64

viztracer-0.4.1-cp37-cp37m-manylinux1_x86_64.whl (694.2 kB view details)

Uploaded CPython 3.7m

viztracer-0.4.1-cp37-cp37m-macosx_10_14_x86_64.whl (667.9 kB view details)

Uploaded CPython 3.7m macOS 10.14+ x86-64

viztracer-0.4.1-cp36-cp36m-win_amd64.whl (671.1 kB view details)

Uploaded CPython 3.6m Windows x86-64

viztracer-0.4.1-cp36-cp36m-manylinux2010_x86_64.whl (693.3 kB view details)

Uploaded CPython 3.6m manylinux: glibc 2.12+ x86-64

viztracer-0.4.1-cp36-cp36m-manylinux1_x86_64.whl (693.3 kB view details)

Uploaded CPython 3.6m

viztracer-0.4.1-cp36-cp36m-macosx_10_14_x86_64.whl (667.9 kB view details)

Uploaded CPython 3.6m macOS 10.14+ x86-64

File details

Details for the file viztracer-0.4.1.tar.gz.

File metadata

  • Download URL: viztracer-0.4.1.tar.gz
  • Upload date:
  • Size: 663.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/47.1.0 requests-toolbelt/0.9.1 tqdm/4.48.2 CPython/3.8.5

File hashes

Hashes for viztracer-0.4.1.tar.gz
Algorithm Hash digest
SHA256 4a0c69242709e57c5a84a0f4e2814bc10b2d3d31bdb7ecc31c08e0055e3b862b
MD5 1dca46baaa64c14fee9501d9dbc426f1
BLAKE2b-256 406d2d22366e2b88c70e7502c0a5726c8feee6d1b644610f0476b917a1ca2e6b

See more details on using hashes here.

File details

Details for the file viztracer-0.4.1-cp38-cp38-win_amd64.whl.

File metadata

  • Download URL: viztracer-0.4.1-cp38-cp38-win_amd64.whl
  • Upload date:
  • Size: 671.2 kB
  • Tags: CPython 3.8, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/47.1.0 requests-toolbelt/0.9.1 tqdm/4.48.2 CPython/3.8.5

File hashes

Hashes for viztracer-0.4.1-cp38-cp38-win_amd64.whl
Algorithm Hash digest
SHA256 0478d04888f06311ee8dc713cc07b14fb7470e9352f9a4ebaead19d5f75abbaf
MD5 bbd91e700fcf8ecd9c67bb909c54048d
BLAKE2b-256 f15d5cf36a76dbddf06250ffb5f6dbbe3408a8534f7b922dbe7355c9cceaabca

See more details on using hashes here.

File details

Details for the file viztracer-0.4.1-cp38-cp38-manylinux2010_x86_64.whl.

File metadata

  • Download URL: viztracer-0.4.1-cp38-cp38-manylinux2010_x86_64.whl
  • Upload date:
  • Size: 697.3 kB
  • Tags: CPython 3.8, manylinux: glibc 2.12+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/47.1.0 requests-toolbelt/0.9.1 tqdm/4.48.2 CPython/3.8.5

File hashes

Hashes for viztracer-0.4.1-cp38-cp38-manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 008dbc945ba682130e04986961ade5f9c2d27a17a200feaa22bbfcd29b2d0030
MD5 2d170215367431c28fea835d922bdcdf
BLAKE2b-256 1396982bcd11d80172466d772ce6ecb93b65004137d5e41915acb0486331a2bc

See more details on using hashes here.

File details

Details for the file viztracer-0.4.1-cp38-cp38-manylinux1_x86_64.whl.

File metadata

  • Download URL: viztracer-0.4.1-cp38-cp38-manylinux1_x86_64.whl
  • Upload date:
  • Size: 697.3 kB
  • Tags: CPython 3.8
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/47.1.0 requests-toolbelt/0.9.1 tqdm/4.48.2 CPython/3.8.5

File hashes

Hashes for viztracer-0.4.1-cp38-cp38-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 9d13ce3724b4d3df655384ce74bb58fbf486d5ea584e1561e83c13d12e92ab0b
MD5 a8bee1f87e41977ee5e23f5e74c1690c
BLAKE2b-256 dfd46d3ede1c0272e1dc0b97212b5ab733d092f502beb88a48a17e766580b83f

See more details on using hashes here.

File details

Details for the file viztracer-0.4.1-cp38-cp38-macosx_10_14_x86_64.whl.

File metadata

  • Download URL: viztracer-0.4.1-cp38-cp38-macosx_10_14_x86_64.whl
  • Upload date:
  • Size: 668.0 kB
  • Tags: CPython 3.8, macOS 10.14+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/47.1.0 requests-toolbelt/0.9.1 tqdm/4.48.2 CPython/3.8.5

File hashes

Hashes for viztracer-0.4.1-cp38-cp38-macosx_10_14_x86_64.whl
Algorithm Hash digest
SHA256 0fc4f7d0c2f512b6a414e1aa8a650352d1df7682c1b57135c85700510f9f8073
MD5 ab76d172b2851473d52473ff049d7750
BLAKE2b-256 acdff415c68d7313bfa30c0e072490b787c138d11a99c09591a6fbdb23eb6896

See more details on using hashes here.

File details

Details for the file viztracer-0.4.1-cp37-cp37m-win_amd64.whl.

File metadata

  • Download URL: viztracer-0.4.1-cp37-cp37m-win_amd64.whl
  • Upload date:
  • Size: 671.1 kB
  • Tags: CPython 3.7m, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/47.1.0 requests-toolbelt/0.9.1 tqdm/4.48.2 CPython/3.7.9

File hashes

Hashes for viztracer-0.4.1-cp37-cp37m-win_amd64.whl
Algorithm Hash digest
SHA256 5889fde9f69d65131c7acbe28d7771e723f133f5c50f39657c25832b5659d0a9
MD5 25b5922870f3242163ceec0298914fd7
BLAKE2b-256 58bbd19cf81e487b0187ce50d779954e771f05eb5326ea9cd4638d17fcbafb6d

See more details on using hashes here.

File details

Details for the file viztracer-0.4.1-cp37-cp37m-manylinux2010_x86_64.whl.

File metadata

  • Download URL: viztracer-0.4.1-cp37-cp37m-manylinux2010_x86_64.whl
  • Upload date:
  • Size: 694.2 kB
  • Tags: CPython 3.7m, manylinux: glibc 2.12+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/47.1.0 requests-toolbelt/0.9.1 tqdm/4.48.2 CPython/3.8.5

File hashes

Hashes for viztracer-0.4.1-cp37-cp37m-manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 59e104fda68aa08cabbdf4cdcfde639b9b86a7d75aff4a5d119b825c43c238d6
MD5 8d0ad57a9222910af40a6cf47714f4cd
BLAKE2b-256 b4124fc91f695fab54e00d0d932db12db10ff59dffa4ac6a3d7401e97df204f7

See more details on using hashes here.

File details

Details for the file viztracer-0.4.1-cp37-cp37m-manylinux1_x86_64.whl.

File metadata

  • Download URL: viztracer-0.4.1-cp37-cp37m-manylinux1_x86_64.whl
  • Upload date:
  • Size: 694.2 kB
  • Tags: CPython 3.7m
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/47.1.0 requests-toolbelt/0.9.1 tqdm/4.48.2 CPython/3.8.5

File hashes

Hashes for viztracer-0.4.1-cp37-cp37m-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 3b3278480ec4eb7839cca3d383de751336921e55f9060599deb5c3055db0bf51
MD5 1374a7d8508a4161c38ed4218be2fad1
BLAKE2b-256 00db040a8eea274f310850ad3715d27744b1a88193d6f13402882c2d7293b7da

See more details on using hashes here.

File details

Details for the file viztracer-0.4.1-cp37-cp37m-macosx_10_14_x86_64.whl.

File metadata

  • Download URL: viztracer-0.4.1-cp37-cp37m-macosx_10_14_x86_64.whl
  • Upload date:
  • Size: 667.9 kB
  • Tags: CPython 3.7m, macOS 10.14+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/47.1.0 requests-toolbelt/0.9.1 tqdm/4.48.2 CPython/3.7.9

File hashes

Hashes for viztracer-0.4.1-cp37-cp37m-macosx_10_14_x86_64.whl
Algorithm Hash digest
SHA256 098959b6b05cccc907d9824c5061904e143ff650bcfcf27453179ee5f3f35433
MD5 635f107bbfaf69d442e4fb166354624c
BLAKE2b-256 6cc49603b9d5c689f35724ed573134ad1dc5c41e4156a264cc79d827dc68356b

See more details on using hashes here.

File details

Details for the file viztracer-0.4.1-cp36-cp36m-win_amd64.whl.

File metadata

  • Download URL: viztracer-0.4.1-cp36-cp36m-win_amd64.whl
  • Upload date:
  • Size: 671.1 kB
  • Tags: CPython 3.6m, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/40.6.2 requests-toolbelt/0.9.1 tqdm/4.48.2 CPython/3.6.8

File hashes

Hashes for viztracer-0.4.1-cp36-cp36m-win_amd64.whl
Algorithm Hash digest
SHA256 60c38be1e0dca505171a30937c3b0c8c4d01a8cfc6b36809a5e7bcc2c6b435cb
MD5 8664bfc15bae434769f1e1a01af1cf04
BLAKE2b-256 1c79cb830660edd7b2e598af9e301f15f0afc976ee39483cee07c47225df3532

See more details on using hashes here.

File details

Details for the file viztracer-0.4.1-cp36-cp36m-manylinux2010_x86_64.whl.

File metadata

  • Download URL: viztracer-0.4.1-cp36-cp36m-manylinux2010_x86_64.whl
  • Upload date:
  • Size: 693.3 kB
  • Tags: CPython 3.6m, manylinux: glibc 2.12+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/47.1.0 requests-toolbelt/0.9.1 tqdm/4.48.2 CPython/3.8.5

File hashes

Hashes for viztracer-0.4.1-cp36-cp36m-manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 b3695cf28fdfb6e084288bd7773c68b8885163a2abf94debb8931a00722d747e
MD5 c84e680055d6e368bf4b210f94b3b1bd
BLAKE2b-256 cb0e2003497004c2ba951ee04b76388cbd5ccdc78a8b12a8aadeb04964746c3a

See more details on using hashes here.

File details

Details for the file viztracer-0.4.1-cp36-cp36m-manylinux1_x86_64.whl.

File metadata

  • Download URL: viztracer-0.4.1-cp36-cp36m-manylinux1_x86_64.whl
  • Upload date:
  • Size: 693.3 kB
  • Tags: CPython 3.6m
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/47.1.0 requests-toolbelt/0.9.1 tqdm/4.48.2 CPython/3.8.5

File hashes

Hashes for viztracer-0.4.1-cp36-cp36m-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 4220850ae848bfe264f97baeea72c0149898965e58b1a012ddedb3ed9eb77052
MD5 c8f57255943c6ec0c2845d01f74d959d
BLAKE2b-256 9ef849e0464460654e811f6fe051a095160c34fc0f02a70f4704c7d46b39b8f0

See more details on using hashes here.

File details

Details for the file viztracer-0.4.1-cp36-cp36m-macosx_10_14_x86_64.whl.

File metadata

  • Download URL: viztracer-0.4.1-cp36-cp36m-macosx_10_14_x86_64.whl
  • Upload date:
  • Size: 667.9 kB
  • Tags: CPython 3.6m, macOS 10.14+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/40.6.2 requests-toolbelt/0.9.1 tqdm/4.48.2 CPython/3.6.12

File hashes

Hashes for viztracer-0.4.1-cp36-cp36m-macosx_10_14_x86_64.whl
Algorithm Hash digest
SHA256 f3a504093b8c64e6a03f2ff890a8322a707cf57e25dd7a198158a03b430d841a
MD5 90e9b55281a44616dcf8dc5f7ee947a0
BLAKE2b-256 309de4e04f2fea82ed760e3268d71b91fd91f8a7a703b489d21c4c6c640b128c

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page