Hacker News new | past | comments | ask | show | jobs | submit login
Visual profiler for Python (github.com/nvdv)
213 points by nvdv on May 19, 2016 | hide | past | favorite | 36 comments

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

Here's a YT video that shows off the profiler in PTVS (warning - loud cowbells)

edit: forgot link - https://www.youtube.com/watch?v=K-KqkFkp55k

I think you forgot the video!

oops, thx, fixed.

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.

Can you clarify what you mean by "turn off debugging"? Are you doing Project | Start without Debugging?

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

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

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

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

http://www.pyvmmonitor.com also provides a nice visual profiler.

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?

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

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

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

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

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.

As a Python learner, very excited to try this out on my code. I'm aware of other tools that can generate these visualizations but figuring out how to use them has seemed like a daunting task for someone like myself who barely understands what bytecode is; hoping this tool will serve as an accessible learning tool!

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

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

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

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.

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.)

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

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.

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

When installing.

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

You're kidding, right?

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.

> 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.

Actually KCachegrind displays files in an open format and is great for visualizing profiling info obtained from other tools.

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?

If it's going to be abandonware, isn't it better to be on Github where it's easily accessible, rather than a random git server that could disappear?

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.

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.

Does it work with Django? If so, how?


Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact