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

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

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/latest

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

Uploaded Source

Built Distributions

viztracer-0.3.3-cp38-cp38-manylinux2010_x86_64.whl (695.7 kB view details)

Uploaded CPython 3.8 manylinux: glibc 2.12+ x86-64

viztracer-0.3.3-cp38-cp38-manylinux1_x86_64.whl (695.7 kB view details)

Uploaded CPython 3.8

viztracer-0.3.3-cp38-cp38-macosx_10_14_x86_64.whl (666.9 kB view details)

Uploaded CPython 3.8 macOS 10.14+ x86-64

viztracer-0.3.3-cp37-cp37m-manylinux2010_x86_64.whl (692.7 kB view details)

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

viztracer-0.3.3-cp37-cp37m-manylinux1_x86_64.whl (692.7 kB view details)

Uploaded CPython 3.7m

viztracer-0.3.3-cp37-cp37m-macosx_10_14_x86_64.whl (666.8 kB view details)

Uploaded CPython 3.7m macOS 10.14+ x86-64

viztracer-0.3.3-cp36-cp36m-manylinux2010_x86_64.whl (691.7 kB view details)

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

viztracer-0.3.3-cp36-cp36m-manylinux1_x86_64.whl (691.7 kB view details)

Uploaded CPython 3.6m

viztracer-0.3.3-cp36-cp36m-macosx_10_14_x86_64.whl (666.8 kB view details)

Uploaded CPython 3.6m macOS 10.14+ x86-64

File details

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

File metadata

  • Download URL: viztracer-0.3.3.tar.gz
  • Upload date:
  • Size: 662.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.3.3.tar.gz
Algorithm Hash digest
SHA256 7360b2cac9d1e972e4ef5e32547e4590236f7457809837610fe1c2a536349ffb
MD5 b77326817cc4f78f73f5ef6d441863d5
BLAKE2b-256 592236faf15e750f6cf428b84ae2f6b811a31475e11d90612db165b38625d3b2

See more details on using hashes here.

File details

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

File metadata

  • Download URL: viztracer-0.3.3-cp38-cp38-manylinux2010_x86_64.whl
  • Upload date:
  • Size: 695.7 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.3.3-cp38-cp38-manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 858bb116904eae6c5da9d3315790d875f49baddd09e14eb12cd48d58e685a44f
MD5 d3ca7e6b5f9ee91d7a2666ee8c8d33e8
BLAKE2b-256 de2bb0d749f9bac252383fe4fbab62f2870d14e9fcb244cd3324ea3b00030415

See more details on using hashes here.

File details

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

File metadata

  • Download URL: viztracer-0.3.3-cp38-cp38-manylinux1_x86_64.whl
  • Upload date:
  • Size: 695.7 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.3.3-cp38-cp38-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 c8a62c411a24f4d67c75e55c254d900fcb5e916dcde89e2a74781abaa15fbe39
MD5 51c1e70e89ba46d35cdd1e9012da191c
BLAKE2b-256 6980e7acaa7de3801766c904266f2933c98e06cd470d307e3d58a92c6baae25d

See more details on using hashes here.

File details

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

File metadata

  • Download URL: viztracer-0.3.3-cp38-cp38-macosx_10_14_x86_64.whl
  • Upload date:
  • Size: 666.9 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.3.3-cp38-cp38-macosx_10_14_x86_64.whl
Algorithm Hash digest
SHA256 171695c702dd725a06ab174256c2602273f96d22689ed0e59309b6832f2aea38
MD5 284ee044bcfc3382ac085fc2ce78d470
BLAKE2b-256 d563294d9d1c3983b1338b0bbb173f4775251620b611d04a235c6ed1b5097a58

See more details on using hashes here.

File details

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

File metadata

  • Download URL: viztracer-0.3.3-cp37-cp37m-manylinux2010_x86_64.whl
  • Upload date:
  • Size: 692.7 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.3.3-cp37-cp37m-manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 23cfcb1591b3795ebb4e84a7f1995c810388d4b40fb2f6e981b3dd6a520dffae
MD5 5564cc946bcabf95cc142c9e423472f4
BLAKE2b-256 e2312400bf3eb0a43a035ceb5c8ceef87acc36f72f678a44eacae747bf13ff7a

See more details on using hashes here.

File details

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

File metadata

  • Download URL: viztracer-0.3.3-cp37-cp37m-manylinux1_x86_64.whl
  • Upload date:
  • Size: 692.7 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.3.3-cp37-cp37m-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 6d408ec10db9b58ef2fe37938ed2c8e4400e565e5b8113ea4fef5763b18897b4
MD5 c2ed4f47a9c3394c95cfa0071f9ea666
BLAKE2b-256 ddae4bbd8aace2c785351254e1697e83038c11fb4aa4ee0386f7a5b6d0bfa3f2

See more details on using hashes here.

File details

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

File metadata

  • Download URL: viztracer-0.3.3-cp37-cp37m-macosx_10_14_x86_64.whl
  • Upload date:
  • Size: 666.8 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.3.3-cp37-cp37m-macosx_10_14_x86_64.whl
Algorithm Hash digest
SHA256 75dded3cd93874a8fcfdb2e23e3cb9c4188d87f5533ef7ebb785623e7ee94ad8
MD5 5c18160ca05056986a3e2a125cabff32
BLAKE2b-256 722f351fa37addc52d1356486757c57e451b1d936b1209994cfb4442ad2ac90f

See more details on using hashes here.

File details

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

File metadata

  • Download URL: viztracer-0.3.3-cp36-cp36m-manylinux2010_x86_64.whl
  • Upload date:
  • Size: 691.7 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.3.3-cp36-cp36m-manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 d30a047ffc3d5615f8e9ed77e63ed8ef6bb13266d3a8c2e89465ae74fcf436df
MD5 44578d523348f8aab415ddb38431ac28
BLAKE2b-256 aff9e8043a798f1324c9c7073147f628818fcb19753f99ae7a22d14a5f3ecd19

See more details on using hashes here.

File details

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

File metadata

  • Download URL: viztracer-0.3.3-cp36-cp36m-manylinux1_x86_64.whl
  • Upload date:
  • Size: 691.7 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.3.3-cp36-cp36m-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 91477009e5c2cb06b93aae874424675239f0cd83ea74a1ce1d1ea97b205c5cc8
MD5 dcf383ac417116a87fc91de73872f38d
BLAKE2b-256 f3c0812db70c8d116b9d099fd5d7a1e36a548260c92353bd73469b36be81ad98

See more details on using hashes here.

File details

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

File metadata

  • Download URL: viztracer-0.3.3-cp36-cp36m-macosx_10_14_x86_64.whl
  • Upload date:
  • Size: 666.8 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.3.3-cp36-cp36m-macosx_10_14_x86_64.whl
Algorithm Hash digest
SHA256 ddd4ffb9601d26772213a678f0343a483544c83def2228fba58a73a0b0e0e847
MD5 7a6cc261b4e35726ebdaae614285fc41
BLAKE2b-256 dda30c43c19cf22914e474729bf1c9fc2c1ff73bcc056813779dcfe38189c992

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