ctrl+shift+p filters: :st2 :st3 :win :osx :linux
Browse

Line​Profiler

by perimosocordiae ST2/ST3

Line-based Python profiling plugin for Sublime Text

Details

  • 2017.02.16.16.13.17
  • github.​com
  • github.​com
  • 3 years ago
  • 3 hours ago
  • 6 years ago

Installs

  • Total 693
  • Win 346
  • OS X 190
  • Linux 157
Sep 20 Sep 19 Sep 18 Sep 17 Sep 16 Sep 15 Sep 14 Sep 13 Sep 12 Sep 11 Sep 10 Sep 9 Sep 8 Sep 7 Sep 6 Sep 5 Sep 4 Sep 3 Sep 2 Sep 1 Aug 31 Aug 30 Aug 29 Aug 28 Aug 27 Aug 26 Aug 25 Aug 24 Aug 23 Aug 22 Aug 21 Aug 20 Aug 19 Aug 18 Aug 17 Aug 16 Aug 15 Aug 14 Aug 13 Aug 12 Aug 11 Aug 10 Aug 9 Aug 8 Aug 7 Aug 6
Windows 0 0 0 0 0 0 0 0 0 1 0 1 0 1 0 0 0 0 0 0 0 0 0 1 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 1
OS X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0
Linux 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1

Readme

Source
raw.​githubusercontent.​com

LineProfiler

This plugin exposes a simple interface to line_profiler and kernprof inside Sublime Text.

Installation

LineProfiler is available via Package Control, which is the easiest way to install it. Alternatively, you can download this repository and place it in your Packages directory.

Configuration

  1. Install line_profiler and kernprof.py.
  2. Optional: Update LineProfiler's settings
    • Accessible at (Preferences > Package Settings > LineProfiler > “Settings - User”)

Available preferences are:

  • kernprof: (Optional) path to the kerprof.py file you downloaded alongside the line_profiler module.
  • pythonpath: (Optional) colon-separated list of paths that will be appended to the start of the the default PYTHONPATH.
  • poll_timeout_seconds: (Optional) number of seconds to wait before killing the profiler. If you're profiling code that runs for longer than a minute, increase this value.
  • poll_sleep_seconds: (Optional) number of seconds to sleep before polling the profiler for results. If you find the delay in getting profiler results too long, decrease this value.

Usage

Add the @profile annotation to any functions you'd like to profile. Then, run the plugin via the available bindings: * ctrl-alt-shift-p * right-click > “Run line_profiler” * Tools > Packages > “Run line_profiler”

If successful, a scratch buffer will appear with your results. If not, check the console (ctrl-`) to see any error messages.

The profiler runs in a background process, so Sublime will continue operating normally until a result is returned.

Example

Here's a simple way to try out LineProfiler and get familiar with the plugin.

Step 1: Open Sublime and write a simple Python file:

def foo():
  for i in xrange(1000):
    bar = i**2
    baz = i*i

if __name__ == '__main__':
  foo()

Sure, it doesn't do much, but it'll run. Be sure to tell Sublime that it's Python code, either by saving it as a .py file, or selecting Python in the bottom bar.

Step 2: Add the @profile decorator to the foo function, like so:

@profile
def foo():

(Everything else is unchanged.)

Step 3: Run LineProfiler, either from the Command Palette, the right-click menu, or the keyboard shortcut. The command is only available in Python mode, so check that first.

Step 4: Wait about a second, and then watch as the profile results appear in a new tab. If all went well, you should see the lines of the foo function annotated with their run counts, total time, and time per run:

function foo in file tmpev_rzr.py took 0.001248 s

Line #      Hits         Time  Per Hit   % Time  Line Contents
==============================================================
     2                                           @profile
     3                                           def foo():
     4      1001          372      0.4     29.8    for i in xrange(1000):
     5      1000          458      0.5     36.7      bar = i**2
     6      1000          418      0.4     33.5      baz = i*i

Some lines may be highlighted. These are “hot spots” in your code, which take up a disproportionate amount of time.

If you don't see anything after a second, check the console (ctrl-`) to see what went wrong. Often, the issue is a simple matter of setting the right paths in the user settings file.