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.0.tar.gz (662.6 kB view details)

Uploaded Source

Built Distributions

viztracer-0.4.0-cp38-cp38-manylinux2010_x86_64.whl (696.9 kB view details)

Uploaded CPython 3.8 manylinux: glibc 2.12+ x86-64

viztracer-0.4.0-cp38-cp38-manylinux1_x86_64.whl (696.9 kB view details)

Uploaded CPython 3.8

viztracer-0.4.0-cp38-cp38-macosx_10_14_x86_64.whl (667.6 kB view details)

Uploaded CPython 3.8 macOS 10.14+ x86-64

viztracer-0.4.0-cp37-cp37m-manylinux2010_x86_64.whl (693.9 kB view details)

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

viztracer-0.4.0-cp37-cp37m-manylinux1_x86_64.whl (693.9 kB view details)

Uploaded CPython 3.7m

viztracer-0.4.0-cp37-cp37m-macosx_10_14_x86_64.whl (667.5 kB view details)

Uploaded CPython 3.7m macOS 10.14+ x86-64

viztracer-0.4.0-cp36-cp36m-manylinux2010_x86_64.whl (692.9 kB view details)

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

viztracer-0.4.0-cp36-cp36m-manylinux1_x86_64.whl (692.9 kB view details)

Uploaded CPython 3.6m

viztracer-0.4.0-cp36-cp36m-macosx_10_14_x86_64.whl (667.5 kB view details)

Uploaded CPython 3.6m macOS 10.14+ x86-64

File details

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

File metadata

  • Download URL: viztracer-0.4.0.tar.gz
  • Upload date:
  • Size: 662.6 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.0.tar.gz
Algorithm Hash digest
SHA256 7a7c49a92148f8710c07db26eeb8a24efd49f5ede2ee122efa68692e8dad42a0
MD5 5db6493342b02087b1cf2e472d1193a0
BLAKE2b-256 84223236f20db80784d03324193b1ee7aff1b7a8f7d7c7e2ecb62c930418e3e6

See more details on using hashes here.

File details

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

File metadata

  • Download URL: viztracer-0.4.0-cp38-cp38-manylinux2010_x86_64.whl
  • Upload date:
  • Size: 696.9 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.0-cp38-cp38-manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 a3821207bcb9bd0452df44cc9cb8ebc0ee9f99ae9c3e603dd19a052ead9d7e4d
MD5 35e819efa454e3dbf198293e8b8f0388
BLAKE2b-256 8922bba9ddec1ac49c4f6296b2bd4a85083df6a68b39a4eb2ceee93e8694a657

See more details on using hashes here.

File details

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

File metadata

  • Download URL: viztracer-0.4.0-cp38-cp38-manylinux1_x86_64.whl
  • Upload date:
  • Size: 696.9 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.0-cp38-cp38-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 2496d01a95e1f60ffe472db54c042d963a432930ef00d52c30bcb25a62faf172
MD5 26249b84145b9baf4e1dffcf074b3df0
BLAKE2b-256 f9e235f9443ed7aa03f91431b9bedb7f9a36cbc1d1edd3b8318f98c6c17dc9f8

See more details on using hashes here.

File details

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

File metadata

  • Download URL: viztracer-0.4.0-cp38-cp38-macosx_10_14_x86_64.whl
  • Upload date:
  • Size: 667.6 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.0-cp38-cp38-macosx_10_14_x86_64.whl
Algorithm Hash digest
SHA256 4089cce168e0efccb24295f1c25d56ac0b2a4745a3c1e316ab1d2a713bf3e6e3
MD5 532e29c9fc06c60b6d814dac8d7f1a53
BLAKE2b-256 02421bb5525de13717121a8f18c27bdeadfbd73b2af0e8268762a4e7e689a301

See more details on using hashes here.

File details

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

File metadata

  • Download URL: viztracer-0.4.0-cp37-cp37m-manylinux2010_x86_64.whl
  • Upload date:
  • Size: 693.9 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.0-cp37-cp37m-manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 35d0dfd056cd3067326cfe33ed7ccf81a1b8276e732c702219d0a423e1727829
MD5 6cf081a8f172c74abd850e98713dd290
BLAKE2b-256 388fcaa32e8f0fccde858ff98567704d7ba2910b2079ac4bb052bcf32edef5fd

See more details on using hashes here.

File details

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

File metadata

  • Download URL: viztracer-0.4.0-cp37-cp37m-manylinux1_x86_64.whl
  • Upload date:
  • Size: 693.9 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.0-cp37-cp37m-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 2abf6b59eaf45beee88f56e5cfab1c6407137a9f332d3411ee48318ee6116ac8
MD5 1adae973ee684b8665aa3d66f55b2c60
BLAKE2b-256 3e823a84bfb9ddb04ac235c73311b6c3f5086fe08782342edd54bb84165d5edd

See more details on using hashes here.

File details

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

File metadata

  • Download URL: viztracer-0.4.0-cp37-cp37m-macosx_10_14_x86_64.whl
  • Upload date:
  • Size: 667.5 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.0-cp37-cp37m-macosx_10_14_x86_64.whl
Algorithm Hash digest
SHA256 4b1247ae1d99d65a7333b315a22d890948dc2f5d21c9da59e63f154a772a349b
MD5 cc2f755877fe75c47228405bbfff05f0
BLAKE2b-256 0ce73df710c818f9bf2e250ecb11035c38088333703846b0bceec5e980a91d6b

See more details on using hashes here.

File details

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

File metadata

  • Download URL: viztracer-0.4.0-cp36-cp36m-manylinux2010_x86_64.whl
  • Upload date:
  • Size: 692.9 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.0-cp36-cp36m-manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 3e749cc4c11e2453c04d3907cc3d41eb681371654be313660c3485c5a848f788
MD5 391af2a65f431b84da22cd7e0fef939e
BLAKE2b-256 938c340260fd104f45ddcc2177466898ed3578aae8127cc1bae7ca8918235015

See more details on using hashes here.

File details

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

File metadata

  • Download URL: viztracer-0.4.0-cp36-cp36m-manylinux1_x86_64.whl
  • Upload date:
  • Size: 692.9 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.0-cp36-cp36m-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 082e425ead6b0539543b0babfc078bf88664671f816ccc976a75b7c836ecdd8d
MD5 917b58b4546347d5572e7f3e97f7e2f0
BLAKE2b-256 6ab640fa906ff86e519cc19da513b824e000afa9e097741e5e1f0be0cf8a0dc8

See more details on using hashes here.

File details

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

File metadata

  • Download URL: viztracer-0.4.0-cp36-cp36m-macosx_10_14_x86_64.whl
  • Upload date:
  • Size: 667.5 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.0-cp36-cp36m-macosx_10_14_x86_64.whl
Algorithm Hash digest
SHA256 da663f5eb87cd23839188a21ad02e05342fbd35728e97403ad5dc95811e50d65
MD5 a0c0f6dc3954b14c65311e75e218be9b
BLAKE2b-256 f72a004c15e5c09a1c2ebecfa6ca9a8c8359812b242db6b6a929d02b73b56fab

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