Skip to main content

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

Project description

VizTracer

build readthedocs pypi support-version license commit

VizTracer is a low-overhead logging/debugging/profiling tool that can trace and visualize your python code execution.

You can take a look at the demo result of multiple example programs.

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

  • 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
  • Custom events to log and track arbitrary data through time
  • Keep latest entries, dump anytime or auto save at exit
  • 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

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

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

There are a lot of advanced usage available as well.

Display Result

By default, VizTracer will generate a stand alone HTML file which you can simply open with Chrome. 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 or chrome://tracing.

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

Trace Filter

VizTracer can filter out the data you don't want to reduce overhead and keep info of a longer time period before you dump the log.

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.

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.

Refer to multi process docs for details

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.

Virtual Debug

You can virtually debug your program with you saved json report. The interface is very similar to pdb. Even better, you can go back in time because VizTracer has all the info recorded for you.

vdb <your_json_report>

Refer to the docs for detailed commands

Performance

VizTracer will introduce 2x to 3x overhead in the worst case. The overhead is much better if there are less function calls or if filters are applied correctly.

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

This version

0.6.1

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

Uploaded Source

Built Distributions

viztracer-0.6.1-cp38-cp38-win_amd64.whl (678.4 kB view details)

Uploaded CPython 3.8 Windows x86-64

viztracer-0.6.1-cp38-cp38-manylinux2010_x86_64.whl (713.7 kB view details)

Uploaded CPython 3.8 manylinux: glibc 2.12+ x86-64

viztracer-0.6.1-cp38-cp38-manylinux1_x86_64.whl (713.7 kB view details)

Uploaded CPython 3.8

viztracer-0.6.1-cp38-cp38-macosx_10_14_x86_64.whl (674.9 kB view details)

Uploaded CPython 3.8 macOS 10.14+ x86-64

viztracer-0.6.1-cp37-cp37m-win_amd64.whl (678.3 kB view details)

Uploaded CPython 3.7m Windows x86-64

viztracer-0.6.1-cp37-cp37m-manylinux2010_x86_64.whl (707.3 kB view details)

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

viztracer-0.6.1-cp37-cp37m-manylinux1_x86_64.whl (707.3 kB view details)

Uploaded CPython 3.7m

viztracer-0.6.1-cp37-cp37m-macosx_10_14_x86_64.whl (674.8 kB view details)

Uploaded CPython 3.7m macOS 10.14+ x86-64

viztracer-0.6.1-cp36-cp36m-win_amd64.whl (678.3 kB view details)

Uploaded CPython 3.6m Windows x86-64

viztracer-0.6.1-cp36-cp36m-manylinux2010_x86_64.whl (706.4 kB view details)

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

viztracer-0.6.1-cp36-cp36m-manylinux1_x86_64.whl (706.4 kB view details)

Uploaded CPython 3.6m

viztracer-0.6.1-cp36-cp36m-macosx_10_14_x86_64.whl (674.8 kB view details)

Uploaded CPython 3.6m macOS 10.14+ x86-64

File details

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

File metadata

  • Download URL: viztracer-0.6.1.tar.gz
  • Upload date:
  • Size: 669.5 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.6.1.tar.gz
Algorithm Hash digest
SHA256 64afa1acbd89e10ae26b570261580b31f08d127462b323fd1ad3846d586ee871
MD5 bf5783c88d09d260f947e249f810e031
BLAKE2b-256 8250dcfebff5815532df5b508a30444b41afa559a2264f7199e7ee567b8f2cb4

See more details on using hashes here.

File details

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

File metadata

  • Download URL: viztracer-0.6.1-cp38-cp38-win_amd64.whl
  • Upload date:
  • Size: 678.4 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.6.1-cp38-cp38-win_amd64.whl
Algorithm Hash digest
SHA256 816fdb9d4547e4ea7ef590f64cb5ff8b14893c5bd23c454c3b973a21fd186bd3
MD5 006a67d9f08c8389e660535b15b8177c
BLAKE2b-256 a21b967864d6d43e6278f544f0cf9650520edff900624e3571cdf00da375a91a

See more details on using hashes here.

File details

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

File metadata

  • Download URL: viztracer-0.6.1-cp38-cp38-manylinux2010_x86_64.whl
  • Upload date:
  • Size: 713.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.6.1-cp38-cp38-manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 c00ada8ee450c40cb2d111acabb974403d5e3dddad4a2ccb5da59bab524a7cd6
MD5 8b84f31ed18e6bf7dbdb9bb972b1ad91
BLAKE2b-256 8ead773530f817258ad3962b42f26109feab5242ada90c8f16932b8e218a3428

See more details on using hashes here.

File details

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

File metadata

  • Download URL: viztracer-0.6.1-cp38-cp38-manylinux1_x86_64.whl
  • Upload date:
  • Size: 713.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.6.1-cp38-cp38-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 0717bdf7e39b786f6a0c6cbb7b416356ccce56dc3a76a4506f889c6f471af379
MD5 1d0f50239e99f127175b556f38290619
BLAKE2b-256 6a71c12a667352210938992b960eb79d0ea98834264c0d9b57ecf5c4feaf7ef8

See more details on using hashes here.

File details

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

File metadata

  • Download URL: viztracer-0.6.1-cp38-cp38-macosx_10_14_x86_64.whl
  • Upload date:
  • Size: 674.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.6.1-cp38-cp38-macosx_10_14_x86_64.whl
Algorithm Hash digest
SHA256 1b751c9e0b37cb77f28ab98701a9a6a6d1b09a5c6151c1fcaf664f015b49e01c
MD5 e36cfd3bc18fdc1de9db643ecddfe136
BLAKE2b-256 03a6fdd26e2a0e4f2ba791ea02285e777ef476e3e285fe1e6a5b494e65ba0c2e

See more details on using hashes here.

File details

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

File metadata

  • Download URL: viztracer-0.6.1-cp37-cp37m-win_amd64.whl
  • Upload date:
  • Size: 678.3 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.6.1-cp37-cp37m-win_amd64.whl
Algorithm Hash digest
SHA256 16233212ede58b41ea4b1d86df2d6f1555860e4cf294c75a6a34c10655c55c7a
MD5 c9855d7545986c7df56e51672f861ab5
BLAKE2b-256 be281cd934f7d056ebf148d01fec4cf2800d99f2776242d8c11516a221dfd3d8

See more details on using hashes here.

File details

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

File metadata

  • Download URL: viztracer-0.6.1-cp37-cp37m-manylinux2010_x86_64.whl
  • Upload date:
  • Size: 707.3 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.6.1-cp37-cp37m-manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 b7bc704c8c0d5ddf3d0aef4b1aa2a748f1b961e9c739da378ff298834da89522
MD5 73bf2f9437c22919dae973b3a8c45733
BLAKE2b-256 c6050bb988d5eb9b795de9637e31dd02f15afb5090a92f32f95aad59c05102e6

See more details on using hashes here.

File details

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

File metadata

  • Download URL: viztracer-0.6.1-cp37-cp37m-manylinux1_x86_64.whl
  • Upload date:
  • Size: 707.3 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.6.1-cp37-cp37m-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 1afcad50466296a37ac96e20c51a9b80113e30ee03fa3117b61161a2e37bb87d
MD5 d39c7d932c8086ef8bbdcc6991c72ffe
BLAKE2b-256 d93b33bcc15832825f6e09f3d32949fd6c8cf92f969a99a7ee6bbbe17526b4c2

See more details on using hashes here.

File details

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

File metadata

  • Download URL: viztracer-0.6.1-cp37-cp37m-macosx_10_14_x86_64.whl
  • Upload date:
  • Size: 674.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.6.1-cp37-cp37m-macosx_10_14_x86_64.whl
Algorithm Hash digest
SHA256 ca20ec3bea23106074ae60a3b46b7897d23d3b01c96d932dca8537d8d58bbb0e
MD5 eecdd395195d6957ab8495b94b3300ef
BLAKE2b-256 4fc88e075bc6a6dbc4831c0f48962713f599cc1156cfb100ff9256de496bece8

See more details on using hashes here.

File details

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

File metadata

  • Download URL: viztracer-0.6.1-cp36-cp36m-win_amd64.whl
  • Upload date:
  • Size: 678.3 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.6.1-cp36-cp36m-win_amd64.whl
Algorithm Hash digest
SHA256 501438f29202c40f4d210ce89e4e22f1e0d9fab760d5cfa5f2726fba47df2d9c
MD5 4a3e36a2c5a0fe87981523d2d09bd9a8
BLAKE2b-256 40fc452e6f2a354b67a60a90afbdf1371e0ccc5d9f1012b1594e3e4dc49caf36

See more details on using hashes here.

File details

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

File metadata

  • Download URL: viztracer-0.6.1-cp36-cp36m-manylinux2010_x86_64.whl
  • Upload date:
  • Size: 706.4 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.6.1-cp36-cp36m-manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 b38035a9be4fb49dc400342e4b8bd6c1989d05beab72891527409494e85cf7a6
MD5 6464e2475773024f5f1f51db848ead40
BLAKE2b-256 aa7f02f9c00c5c742e1d03dddf3a3a15b7053b35630b7703c6d2ebf7a2cd3cc5

See more details on using hashes here.

File details

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

File metadata

  • Download URL: viztracer-0.6.1-cp36-cp36m-manylinux1_x86_64.whl
  • Upload date:
  • Size: 706.4 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.6.1-cp36-cp36m-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 da8fcdaab6a898eeceaac6c773429cf31b28f4443d168564532a079f88eb95f5
MD5 1c19073c959e62b8193332c591e13279
BLAKE2b-256 3d6c7009c7d5d99cd52ed7a6b51cac63458b4e727c0f88a36d7e68046ca9f8ce

See more details on using hashes here.

File details

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

File metadata

  • Download URL: viztracer-0.6.1-cp36-cp36m-macosx_10_14_x86_64.whl
  • Upload date:
  • Size: 674.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.6.1-cp36-cp36m-macosx_10_14_x86_64.whl
Algorithm Hash digest
SHA256 9702d82432cfe8f1bd2b7bdcf11101975963111346fefe9b81a62295eb505cfc
MD5 c02f9183084325c496c77e3e6c7ede1b
BLAKE2b-256 e03fe2a10a102ba7d1abe4473208544fc71bfd779007e30ea7ffd23bbda59b5e

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