
Visual profiler for Python - nvdv
https://github.com/nvdv/vprof
======
romanovcode
You can also just use Python for Visual Studio[0] if you're on Windows.

[0] [https://www.visualstudio.com/en-us/features/python-
vs.aspx](https://www.visualstudio.com/en-us/features/python-vs.aspx)

~~~
dancsi
Is it just me, or running programs under PTVS slows them down by quite a bit?
Even when I turn off debugging, it still seems to be slower than when I run
the program from the terminal.

~~~
chuckkir
It is slower for me as well, but the debugger is excellent.

~~~
smortaz
perhaps hitting F5 instead of ctrl-F5 (run w/o debugging)?

------
fijal
TL;DR; it's a visualizer for cProfile (with all the cProfile problems)

DISCLAIMER: I'm an author of cProfile competitor, vmprof

------
fabioz
[http://www.pyvmmonitor.com](http://www.pyvmmonitor.com) also provides a nice
visual profiler.

~~~
infinite8s
I noticed that PyVMMonitor is built on PyQt. Mind if I ask you some questions
about how you licensed the underlying tech stack to be able to sell it?

------
grinich
We did something similar at Nylas, but we built it to run in production across
our entire fleet:
[https://nylas.com/blog/performance/](https://nylas.com/blog/performance/)

------
devy
Intellij-based PyCharm uses yappi[1] or cProfile to provide similar visual
profiling functionalities.

[1]:
[https://bitbucket.org/sumerc/yappi/](https://bitbucket.org/sumerc/yappi/)

------
oneweekwonder
I like the flame graphs. Reminded me about the Netflix JavaScript Talks -
Debugging Node.js in Production[0] talk, 11 min in.

[0]:
[https://www.youtube.com/watch?v=O1YP8QP9gLA](https://www.youtube.com/watch?v=O1YP8QP9gLA)

~~~
mdaniel
Just as an FYI, youtube links support a time bookmark at the end of the URL
with `?v=CAFEBABE#t=11m0s` (in your example); the "share" widget on the site
will encode the bookmark for you, if you prefer that method.

------
oxplot
I have just recently discovered chrome://tracing and wrote a quick python
profiler [1] to output in its format.

[1]: [https://github.com/oxplot/crprof](https://github.com/oxplot/crprof)

------
devy
How do I use this visual profiler to profile a Flask app?

~~~
markbnj
You'd just run the flask app under the profiler and send requests as you
normally would, right? Am I missing something?

~~~
nvdv
I haven't profiled any webapps yet, but you can profile functions inside your
Flask app.

First you start profiler in remote mode

    
    
        vprof -r 
    

and then use vprof.profiler.run function:

    
    
        profiler.run(foo, 'cmh', args=(arg1, arg2), host='localhost', port=8000)
    

(replace host and port if you run your webappp on another maching with address
of machine you run "vprof -r" on).

This will run profiler and send stats to server in JSON format.

------
JonathonW
Neat-- wish I'd had this a few weeks ago when I was trying to track down some
performance issues.

(Ended up getting what I needed out of cProfile, which this also uses on the
backend. Would've been nice to have the nice visualizations, though.)

------
DiThi
Is there a similar tool of the code heatmap but for JS?

~~~
brndn
Lots of info on that here:
[http://www.brendangregg.com/flamegraphs.html](http://www.brendangregg.com/flamegraphs.html)

~~~
DiThi
I mean the code coverage tool, not the flame graphs. To e.g. know what paths
of the code are never executed. Chrome and Firefox already show flame graphs
in their profilers.

------
roberdam
"RuntimeError: maximum recursion depth exceeded while calling a Python object
"

When installing.

------
fijal
I would like to complain about name similarity to vmprof (my project)

~~~
daveguy
You're kidding, right?

------
kolapuriya
KCacheGrind relies on using valgrind, which gives you extremely detailed
information on runtime information by wrapping your execution context at a
very low level. For this reason, it can track individual memory allocations,
function call statistics, etc. However, for Python, that can be a bit
overkill; usually you're just looking to measure what parts of your code are
taking up executing time and heap space.

This package uses cProfile, psutils, and pstats go get runtime information on
your code as it's running. It's doing what valgrind does but in a much
"higher-level" fashion, in pure Python. This means that it can give you more
relevant information about your Python code.

~~~
forgotpwtomain
> It's doing what valgrind does but in a much "higher-level" fashion, in pure
> Python.

Valgrind is essentially a VM, this uses cProfile - I wouldn't call that doing
the 'same thing' at all.

------
vegabook
Looks like an awesome piece of technology, but why, whenever I see headline
xxxx followed by "(github.com)" do I get a slight feeling of despair - that
feeling that this project has a high chance of being future abandonware. Is it
that having a proper, dedicated, expensive-looking, website, away from github,
is a signal of access to resources, willingness to do proper marketing and
documentation, and therefore, by correlation, longevity?

~~~
notifier2050
Like with almost any open source project nobody promises you anything. But
it's not framework, you don't lose much by not using it and you don't have to
rewrite your code in case it would be abandoned.

~~~
vegabook
yes I realise that I'm looking a gift horse in the mouth, and I love git(hub),
but I'm just pointing out that "(github.com)" might just be a net-negative
marketing point for people looking for robust software.

------
albasha
Does it work with Django? If so, how?

------
gsmethells
Cool!

