<div dir="ltr"><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;font-size:small">Hi,</div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;font-size:small"><br></div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;font-size:small">I'd like to edit this to update some stuff (there are broken links, and outdated packages), as well as to include a reference to Scalene, a Python profiler I developed that offers a number of useful advantages over other profilers.</div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;font-size:small"><br></div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;font-size:small">Thanks,<br>-- emery (Scalene developer, among many other things)</div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;font-size:small"><br></div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;font-size:small">From <a href="https://github.com/emeryberger/scalene" style="font-family:Arial,Helvetica,sans-serif">https://github.com/emeryberger/scalene</a>:</div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;font-size:small"><br></div><div class="gmail_default" style=""><p style="font-family:-apple-system,system-ui,"Segoe UI",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";font-size:16px;box-sizing:border-box;margin-top:0px;margin-bottom:16px;color:rgb(36,41,46)">Scalene is a high-performance CPU <em style="box-sizing:border-box">and</em> memory profiler for Python that does a few things that other Python profilers do not and cannot do. It runs orders of magnitude faster than other profilers while delivering far more detailed information.</p><ol style="font-family:-apple-system,system-ui,"Segoe UI",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";font-size:16px;box-sizing:border-box;padding-left:2em;margin-top:0px;margin-bottom:16px;color:rgb(36,41,46)"><li style="box-sizing:border-box">Scalene is <em style="box-sizing:border-box">fast</em>. It uses sampling instead of instrumentation or relying on Python's tracing facilities. Its overhead is typically no more than 10-20% (and often less).</li><li style="box-sizing:border-box;margin-top:0.25em">Scalene is <em style="box-sizing:border-box">precise</em>. Unlike most other Python profilers, Scalene performs CPU profiling <em style="box-sizing:border-box">at the line level</em>, pointing to the specific lines of code that are responsible for the execution time in your program. This level of detail can be much more useful than the function-level profiles returned by most profilers.</li><li style="box-sizing:border-box;margin-top:0.25em">Scalene separates out time spent running in Python from time spent in native code (including libraries). Most Python programmers aren't going to optimize the performance of native code (which is usually either in the Python implementation or external libraries), so this helps developers focus their optimization efforts on the code they can actually improve.</li><li style="box-sizing:border-box;margin-top:0.25em">Scalene <em style="box-sizing:border-box">profiles memory usage</em>. In addition to tracking CPU usage, Scalene also points to the specific lines of code responsible for memory growth. It accomplishes this via an included specialized memory allocator.</li></ol><div style=""><span style="color:rgb(36,41,46);font-family:-apple-system,system-ui,"Segoe UI",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";font-size:16px">Below is a table comparing the </span><span style="box-sizing:border-box;font-weight:600;color:rgb(36,41,46);font-family:-apple-system,system-ui,"Segoe UI",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";font-size:16px">performance</span><span style="color:rgb(36,41,46);font-family:-apple-system,system-ui,"Segoe UI",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";font-size:16px"> of various profilers to Scalene:</span><font color="#24292e" face="-apple-system, system-ui, Segoe UI, Helvetica, Arial, sans-serif, Apple Color Emoji, Segoe UI Emoji"><span style="font-size:16px"><br></span></font></div><div style=""><font color="#24292e" face="-apple-system, system-ui, Segoe UI, Helvetica, Arial, sans-serif, Apple Color Emoji, Segoe UI Emoji"><span style="font-size:16px"><br></span></font></div></div><div><div dir="ltr" class="gmail_signature" data-smartmail="gmail_signature"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><table style="box-sizing:border-box;border-spacing:0px;border-collapse:collapse;margin-top:0px;margin-bottom:16px;display:block;width:882px;overflow:auto;color:rgb(36,41,46);font-family:-apple-system,system-ui,"Segoe UI",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";font-size:16px"><thead style="box-sizing:border-box"><tr style="box-sizing:border-box;border-top:1px solid rgb(198,203,209)"><th align="left" style="box-sizing:border-box;padding:6px 13px;border:1px solid rgb(223,226,229)">Profiler</th><th align="right" style="box-sizing:border-box;padding:6px 13px;border:1px solid rgb(223,226,229)">Time</th><th align="right" style="box-sizing:border-box;padding:6px 13px;border:1px solid rgb(223,226,229)">Slowdown</th></tr></thead><tbody style="box-sizing:border-box"><tr style="box-sizing:border-box;border-top:1px solid rgb(198,203,209)"><td align="left" style="box-sizing:border-box;padding:6px 13px;border:1px solid rgb(223,226,229)"><em style="box-sizing:border-box">original program</em></td><td align="right" style="box-sizing:border-box;padding:6px 13px;border:1px solid rgb(223,226,229)">6.71s</td><td align="right" style="box-sizing:border-box;padding:6px 13px;border:1px solid rgb(223,226,229)">1.0x</td></tr><tr style="box-sizing:border-box;background-color:rgb(246,248,250);border-top:1px solid rgb(198,203,209)"><td align="left" style="box-sizing:border-box;padding:6px 13px;border:1px solid rgb(223,226,229)"></td><td align="right" style="box-sizing:border-box;padding:6px 13px;border:1px solid rgb(223,226,229)"></td><td align="right" style="box-sizing:border-box;padding:6px 13px;border:1px solid rgb(223,226,229)"></td></tr><tr style="box-sizing:border-box;border-top:1px solid rgb(198,203,209)"><td align="left" style="box-sizing:border-box;padding:6px 13px;border:1px solid rgb(223,226,229)"><code style="box-sizing:border-box;font-family:SFMono-Regular,Consolas,"Liberation Mono",Menlo,monospace;font-size:13.6px;padding:0.2em 0.4em;margin:0px;background-color:rgba(27,31,35,0.05);border-radius:3px">cProfile</code></td><td align="right" style="box-sizing:border-box;padding:6px 13px;border:1px solid rgb(223,226,229)">11.04s</td><td align="right" style="box-sizing:border-box;padding:6px 13px;border:1px solid rgb(223,226,229)">1.65x</td></tr><tr style="box-sizing:border-box;background-color:rgb(246,248,250);border-top:1px solid rgb(198,203,209)"><td align="left" style="box-sizing:border-box;padding:6px 13px;border:1px solid rgb(223,226,229)"><code style="box-sizing:border-box;font-family:SFMono-Regular,Consolas,"Liberation Mono",Menlo,monospace;font-size:13.6px;padding:0.2em 0.4em;margin:0px;background-color:rgba(27,31,35,0.05);border-radius:3px">Profile</code></td><td align="right" style="box-sizing:border-box;padding:6px 13px;border:1px solid rgb(223,226,229)">202.26s</td><td align="right" style="box-sizing:border-box;padding:6px 13px;border:1px solid rgb(223,226,229)">30.14x</td></tr><tr style="box-sizing:border-box;border-top:1px solid rgb(198,203,209)"><td align="left" style="box-sizing:border-box;padding:6px 13px;border:1px solid rgb(223,226,229)"><code style="box-sizing:border-box;font-family:SFMono-Regular,Consolas,"Liberation Mono",Menlo,monospace;font-size:13.6px;padding:0.2em 0.4em;margin:0px;background-color:rgba(27,31,35,0.05);border-radius:3px">pyinstrument</code></td><td align="right" style="box-sizing:border-box;padding:6px 13px;border:1px solid rgb(223,226,229)">9.83s</td><td align="right" style="box-sizing:border-box;padding:6px 13px;border:1px solid rgb(223,226,229)">1.46x</td></tr><tr style="box-sizing:border-box;background-color:rgb(246,248,250);border-top:1px solid rgb(198,203,209)"><td align="left" style="box-sizing:border-box;padding:6px 13px;border:1px solid rgb(223,226,229)"><code style="box-sizing:border-box;font-family:SFMono-Regular,Consolas,"Liberation Mono",Menlo,monospace;font-size:13.6px;padding:0.2em 0.4em;margin:0px;background-color:rgba(27,31,35,0.05);border-radius:3px">line_profiler</code></td><td align="right" style="box-sizing:border-box;padding:6px 13px;border:1px solid rgb(223,226,229)">78.0s</td><td align="right" style="box-sizing:border-box;padding:6px 13px;border:1px solid rgb(223,226,229)">11.62x</td></tr><tr style="box-sizing:border-box;border-top:1px solid rgb(198,203,209)"><td align="left" style="box-sizing:border-box;padding:6px 13px;border:1px solid rgb(223,226,229)"><code style="box-sizing:border-box;font-family:SFMono-Regular,Consolas,"Liberation Mono",Menlo,monospace;font-size:13.6px;padding:0.2em 0.4em;margin:0px;background-color:rgba(27,31,35,0.05);border-radius:3px">pprofile</code> <em style="box-sizing:border-box">(deterministic)</em></td><td align="right" style="box-sizing:border-box;padding:6px 13px;border:1px solid rgb(223,226,229)">403.67s</td><td align="right" style="box-sizing:border-box;padding:6px 13px;border:1px solid rgb(223,226,229)">60.16x</td></tr><tr style="box-sizing:border-box;background-color:rgb(246,248,250);border-top:1px solid rgb(198,203,209)"><td align="left" style="box-sizing:border-box;padding:6px 13px;border:1px solid rgb(223,226,229)"><code style="box-sizing:border-box;font-family:SFMono-Regular,Consolas,"Liberation Mono",Menlo,monospace;font-size:13.6px;padding:0.2em 0.4em;margin:0px;background-color:rgba(27,31,35,0.05);border-radius:3px">pprofile</code> <em style="box-sizing:border-box">(statistical)</em></td><td align="right" style="box-sizing:border-box;padding:6px 13px;border:1px solid rgb(223,226,229)">7.47s</td><td align="right" style="box-sizing:border-box;padding:6px 13px;border:1px solid rgb(223,226,229)">1.11x</td></tr><tr style="box-sizing:border-box;border-top:1px solid rgb(198,203,209)"><td align="left" style="box-sizing:border-box;padding:6px 13px;border:1px solid rgb(223,226,229)"><code style="box-sizing:border-box;font-family:SFMono-Regular,Consolas,"Liberation Mono",Menlo,monospace;font-size:13.6px;padding:0.2em 0.4em;margin:0px;background-color:rgba(27,31,35,0.05);border-radius:3px">yappi</code> <em style="box-sizing:border-box">(CPU)</em></td><td align="right" style="box-sizing:border-box;padding:6px 13px;border:1px solid rgb(223,226,229)">127.53s</td><td align="right" style="box-sizing:border-box;padding:6px 13px;border:1px solid rgb(223,226,229)">19.01x</td></tr><tr style="box-sizing:border-box;background-color:rgb(246,248,250);border-top:1px solid rgb(198,203,209)"><td align="left" style="box-sizing:border-box;padding:6px 13px;border:1px solid rgb(223,226,229)"><code style="box-sizing:border-box;font-family:SFMono-Regular,Consolas,"Liberation Mono",Menlo,monospace;font-size:13.6px;padding:0.2em 0.4em;margin:0px;background-color:rgba(27,31,35,0.05);border-radius:3px">yappi</code> <em style="box-sizing:border-box">(wallclock)</em></td><td align="right" style="box-sizing:border-box;padding:6px 13px;border:1px solid rgb(223,226,229)">21.45s</td><td align="right" style="box-sizing:border-box;padding:6px 13px;border:1px solid rgb(223,226,229)">3.2x</td></tr><tr style="box-sizing:border-box;border-top:1px solid rgb(198,203,209)"><td align="left" style="box-sizing:border-box;padding:6px 13px;border:1px solid rgb(223,226,229)"><code style="box-sizing:border-box;font-family:SFMono-Regular,Consolas,"Liberation Mono",Menlo,monospace;font-size:13.6px;padding:0.2em 0.4em;margin:0px;background-color:rgba(27,31,35,0.05);border-radius:3px">py-spy</code></td><td align="right" style="box-sizing:border-box;padding:6px 13px;border:1px solid rgb(223,226,229)">7.25s</td><td align="right" style="box-sizing:border-box;padding:6px 13px;border:1px solid rgb(223,226,229)">1.08x</td></tr><tr style="box-sizing:border-box;background-color:rgb(246,248,250);border-top:1px solid rgb(198,203,209)"><td align="left" style="box-sizing:border-box;padding:6px 13px;border:1px solid rgb(223,226,229)"><code style="box-sizing:border-box;font-family:SFMono-Regular,Consolas,"Liberation Mono",Menlo,monospace;font-size:13.6px;padding:0.2em 0.4em;margin:0px;background-color:rgba(27,31,35,0.05);border-radius:3px">memory_profiler</code></td><td align="right" style="box-sizing:border-box;padding:6px 13px;border:1px solid rgb(223,226,229)"><em style="box-sizing:border-box">> 2 hours</em></td><td align="right" style="box-sizing:border-box;padding:6px 13px;border:1px solid rgb(223,226,229)"><span style="box-sizing:border-box;font-weight:600">>1000x</span></td></tr><tr style="box-sizing:border-box;border-top:1px solid rgb(198,203,209)"><td align="left" style="box-sizing:border-box;padding:6px 13px;border:1px solid rgb(223,226,229)"></td><td align="right" style="box-sizing:border-box;padding:6px 13px;border:1px solid rgb(223,226,229)"></td><td align="right" style="box-sizing:border-box;padding:6px 13px;border:1px solid rgb(223,226,229)"></td></tr><tr style="box-sizing:border-box;background-color:rgb(246,248,250);border-top:1px solid rgb(198,203,209)"><td align="left" style="box-sizing:border-box;padding:6px 13px;border:1px solid rgb(223,226,229)"><code style="box-sizing:border-box;font-family:SFMono-Regular,Consolas,"Liberation Mono",Menlo,monospace;font-size:13.6px;padding:0.2em 0.4em;margin:0px;background-color:rgba(27,31,35,0.05);border-radius:3px">scalene</code> <em style="box-sizing:border-box">(CPU only)</em></td><td align="right" style="box-sizing:border-box;padding:6px 13px;border:1px solid rgb(223,226,229)">6.98s</td><td align="right" style="box-sizing:border-box;padding:6px 13px;border:1px solid rgb(223,226,229)"><span style="box-sizing:border-box;font-weight:600">1.04x</span></td></tr><tr style="box-sizing:border-box;border-top:1px solid rgb(198,203,209)"><td align="left" style="box-sizing:border-box;padding:6px 13px;border:1px solid rgb(223,226,229)"><code style="box-sizing:border-box;font-family:SFMono-Regular,Consolas,"Liberation Mono",Menlo,monospace;font-size:13.6px;padding:0.2em 0.4em;margin:0px;background-color:rgba(27,31,35,0.05);border-radius:3px">scalene</code> <em style="box-sizing:border-box">(CPU + memory)</em></td><td align="right" style="box-sizing:border-box;padding:6px 13px;border:1px solid rgb(223,226,229)">7.68s</td><td align="right" style="box-sizing:border-box;padding:6px 13px;border:1px solid rgb(223,226,229)"><span style="box-sizing:border-box;font-weight:600">1.14x</span></td></tr></tbody></table></div><div dir="ltr"><br></div><div dir="ltr"><p style="box-sizing:border-box;margin-top:0px;margin-bottom:16px;color:rgb(36,41,46);font-family:-apple-system,system-ui,"Segoe UI",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";font-size:16px"><span class="gmail_default" style="font-family:arial,helvetica,sans-serif;font-size:small"></span>the <span style="box-sizing:border-box;font-weight:600">features</span> of other profilers vs. Scalene<span class="gmail_default" style="font-family:arial,helvetica,sans-serif;font-size:small">:</span></p><table style="box-sizing:border-box;border-spacing:0px;border-collapse:collapse;margin-top:0px;margin-bottom:16px;display:block;width:882px;overflow:auto;color:rgb(36,41,46);font-family:-apple-system,system-ui,"Segoe UI",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";font-size:16px"><thead style="box-sizing:border-box"><tr style="box-sizing:border-box;border-top:1px solid rgb(198,203,209)"><th align="right" style="box-sizing:border-box;padding:6px 13px;border:1px solid rgb(223,226,229)">Profiler</th><th align="center" style="box-sizing:border-box;padding:6px 13px;border:1px solid rgb(223,226,229)">Line-level?</th><th align="center" style="box-sizing:border-box;padding:6px 13px;border:1px solid rgb(223,226,229)">CPU?</th><th align="center" style="box-sizing:border-box;padding:6px 13px;border:1px solid rgb(223,226,229)">Wall clock vs. CPU time?</th><th align="center" style="box-sizing:border-box;padding:6px 13px;border:1px solid rgb(223,226,229)">Python vs. native?</th><th align="center" style="box-sizing:border-box;padding:6px 13px;border:1px solid rgb(223,226,229)">Memory?</th><th align="center" style="box-sizing:border-box;padding:6px 13px;border:1px solid rgb(223,226,229)">Unmodified code?</th><th align="center" style="box-sizing:border-box;padding:6px 13px;border:1px solid rgb(223,226,229)">Threads?</th></tr></thead><tbody style="box-sizing:border-box"><tr style="box-sizing:border-box;border-top:1px solid rgb(198,203,209)"><td align="right" style="box-sizing:border-box;padding:6px 13px;border:1px solid rgb(223,226,229)"><code style="box-sizing:border-box;font-family:SFMono-Regular,Consolas,"Liberation Mono",Menlo,monospace;font-size:13.6px;padding:0.2em 0.4em;margin:0px;background-color:rgba(27,31,35,0.05);border-radius:3px">cProfile</code></td><td align="center" style="box-sizing:border-box;padding:6px 13px;border:1px solid rgb(223,226,229)"></td><td align="center" style="box-sizing:border-box;padding:6px 13px;border:1px solid rgb(223,226,229)">✔</td><td align="center" style="box-sizing:border-box;padding:6px 13px;border:1px solid rgb(223,226,229)">wall clock</td><td align="center" style="box-sizing:border-box;padding:6px 13px;border:1px solid rgb(223,226,229)"></td><td align="center" style="box-sizing:border-box;padding:6px 13px;border:1px solid rgb(223,226,229)"></td><td align="center" style="box-sizing:border-box;padding:6px 13px;border:1px solid rgb(223,226,229)">✔</td><td align="center" style="box-sizing:border-box;padding:6px 13px;border:1px solid rgb(223,226,229)"></td></tr><tr style="box-sizing:border-box;background-color:rgb(246,248,250);border-top:1px solid rgb(198,203,209)"><td align="right" style="box-sizing:border-box;padding:6px 13px;border:1px solid rgb(223,226,229)"><code style="box-sizing:border-box;font-family:SFMono-Regular,Consolas,"Liberation Mono",Menlo,monospace;font-size:13.6px;padding:0.2em 0.4em;margin:0px;background-color:rgba(27,31,35,0.05);border-radius:3px">Profile</code></td><td align="center" style="box-sizing:border-box;padding:6px 13px;border:1px solid rgb(223,226,229)"></td><td align="center" style="box-sizing:border-box;padding:6px 13px;border:1px solid rgb(223,226,229)">✔</td><td align="center" style="box-sizing:border-box;padding:6px 13px;border:1px solid rgb(223,226,229)">CPU time</td><td align="center" style="box-sizing:border-box;padding:6px 13px;border:1px solid rgb(223,226,229)"></td><td align="center" style="box-sizing:border-box;padding:6px 13px;border:1px solid rgb(223,226,229)"></td><td align="center" style="box-sizing:border-box;padding:6px 13px;border:1px solid rgb(223,226,229)">✔</td><td align="center" style="box-sizing:border-box;padding:6px 13px;border:1px solid rgb(223,226,229)"></td></tr><tr style="box-sizing:border-box;border-top:1px solid rgb(198,203,209)"><td align="right" style="box-sizing:border-box;padding:6px 13px;border:1px solid rgb(223,226,229)"><code style="box-sizing:border-box;font-family:SFMono-Regular,Consolas,"Liberation Mono",Menlo,monospace;font-size:13.6px;padding:0.2em 0.4em;margin:0px;background-color:rgba(27,31,35,0.05);border-radius:3px">pyinstrument</code></td><td align="center" style="box-sizing:border-box;padding:6px 13px;border:1px solid rgb(223,226,229)"></td><td align="center" style="box-sizing:border-box;padding:6px 13px;border:1px solid rgb(223,226,229)">✔</td><td align="center" style="box-sizing:border-box;padding:6px 13px;border:1px solid rgb(223,226,229)">wall clock</td><td align="center" style="box-sizing:border-box;padding:6px 13px;border:1px solid rgb(223,226,229)"></td><td align="center" style="box-sizing:border-box;padding:6px 13px;border:1px solid rgb(223,226,229)"></td><td align="center" style="box-sizing:border-box;padding:6px 13px;border:1px solid rgb(223,226,229)">✔</td><td align="center" style="box-sizing:border-box;padding:6px 13px;border:1px solid rgb(223,226,229)"></td></tr><tr style="box-sizing:border-box;background-color:rgb(246,248,250);border-top:1px solid rgb(198,203,209)"><td align="right" style="box-sizing:border-box;padding:6px 13px;border:1px solid rgb(223,226,229)"><code style="box-sizing:border-box;font-family:SFMono-Regular,Consolas,"Liberation Mono",Menlo,monospace;font-size:13.6px;padding:0.2em 0.4em;margin:0px;background-color:rgba(27,31,35,0.05);border-radius:3px">line_profiler</code></td><td align="center" style="box-sizing:border-box;padding:6px 13px;border:1px solid rgb(223,226,229)">✔</td><td align="center" style="box-sizing:border-box;padding:6px 13px;border:1px solid rgb(223,226,229)">✔</td><td align="center" style="box-sizing:border-box;padding:6px 13px;border:1px solid rgb(223,226,229)">wall clock</td><td align="center" style="box-sizing:border-box;padding:6px 13px;border:1px solid rgb(223,226,229)"></td><td align="center" style="box-sizing:border-box;padding:6px 13px;border:1px solid rgb(223,226,229)"></td><td align="center" style="box-sizing:border-box;padding:6px 13px;border:1px solid rgb(223,226,229)"></td><td align="center" style="box-sizing:border-box;padding:6px 13px;border:1px solid rgb(223,226,229)"></td></tr><tr style="box-sizing:border-box;border-top:1px solid rgb(198,203,209)"><td align="right" style="box-sizing:border-box;padding:6px 13px;border:1px solid rgb(223,226,229)"><code style="box-sizing:border-box;font-family:SFMono-Regular,Consolas,"Liberation Mono",Menlo,monospace;font-size:13.6px;padding:0.2em 0.4em;margin:0px;background-color:rgba(27,31,35,0.05);border-radius:3px">pprofile</code> <em style="box-sizing:border-box">(deterministic)</em></td><td align="center" style="box-sizing:border-box;padding:6px 13px;border:1px solid rgb(223,226,229)">✔</td><td align="center" style="box-sizing:border-box;padding:6px 13px;border:1px solid rgb(223,226,229)">✔</td><td align="center" style="box-sizing:border-box;padding:6px 13px;border:1px solid rgb(223,226,229)">wall clock</td><td align="center" style="box-sizing:border-box;padding:6px 13px;border:1px solid rgb(223,226,229)"></td><td align="center" style="box-sizing:border-box;padding:6px 13px;border:1px solid rgb(223,226,229)"></td><td align="center" style="box-sizing:border-box;padding:6px 13px;border:1px solid rgb(223,226,229)">✔</td><td align="center" style="box-sizing:border-box;padding:6px 13px;border:1px solid rgb(223,226,229)">✔</td></tr><tr style="box-sizing:border-box;background-color:rgb(246,248,250);border-top:1px solid rgb(198,203,209)"><td align="right" style="box-sizing:border-box;padding:6px 13px;border:1px solid rgb(223,226,229)"><code style="box-sizing:border-box;font-family:SFMono-Regular,Consolas,"Liberation Mono",Menlo,monospace;font-size:13.6px;padding:0.2em 0.4em;margin:0px;background-color:rgba(27,31,35,0.05);border-radius:3px">pprofile</code> <em style="box-sizing:border-box">(statistical)</em></td><td align="center" style="box-sizing:border-box;padding:6px 13px;border:1px solid rgb(223,226,229)">✔</td><td align="center" style="box-sizing:border-box;padding:6px 13px;border:1px solid rgb(223,226,229)">✔</td><td align="center" style="box-sizing:border-box;padding:6px 13px;border:1px solid rgb(223,226,229)">wall clock</td><td align="center" style="box-sizing:border-box;padding:6px 13px;border:1px solid rgb(223,226,229)"></td><td align="center" style="box-sizing:border-box;padding:6px 13px;border:1px solid rgb(223,226,229)"></td><td align="center" style="box-sizing:border-box;padding:6px 13px;border:1px solid rgb(223,226,229)">✔</td><td align="center" style="box-sizing:border-box;padding:6px 13px;border:1px solid rgb(223,226,229)">✔</td></tr><tr style="box-sizing:border-box;border-top:1px solid rgb(198,203,209)"><td align="right" style="box-sizing:border-box;padding:6px 13px;border:1px solid rgb(223,226,229)"><code style="box-sizing:border-box;font-family:SFMono-Regular,Consolas,"Liberation Mono",Menlo,monospace;font-size:13.6px;padding:0.2em 0.4em;margin:0px;background-color:rgba(27,31,35,0.05);border-radius:3px">yappi</code> <em style="box-sizing:border-box">(CPU)</em></td><td align="center" style="box-sizing:border-box;padding:6px 13px;border:1px solid rgb(223,226,229)"></td><td align="center" style="box-sizing:border-box;padding:6px 13px;border:1px solid rgb(223,226,229)">✔</td><td align="center" style="box-sizing:border-box;padding:6px 13px;border:1px solid rgb(223,226,229)">CPU time</td><td align="center" style="box-sizing:border-box;padding:6px 13px;border:1px solid rgb(223,226,229)"></td><td align="center" style="box-sizing:border-box;padding:6px 13px;border:1px solid rgb(223,226,229)"></td><td align="center" style="box-sizing:border-box;padding:6px 13px;border:1px solid rgb(223,226,229)">✔</td><td align="center" style="box-sizing:border-box;padding:6px 13px;border:1px solid rgb(223,226,229)">✔</td></tr><tr style="box-sizing:border-box;background-color:rgb(246,248,250);border-top:1px solid rgb(198,203,209)"><td align="right" style="box-sizing:border-box;padding:6px 13px;border:1px solid rgb(223,226,229)"><code style="box-sizing:border-box;font-family:SFMono-Regular,Consolas,"Liberation Mono",Menlo,monospace;font-size:13.6px;padding:0.2em 0.4em;margin:0px;background-color:rgba(27,31,35,0.05);border-radius:3px">yappi</code> <em style="box-sizing:border-box">(wallclock)</em></td><td align="center" style="box-sizing:border-box;padding:6px 13px;border:1px solid rgb(223,226,229)"></td><td align="center" style="box-sizing:border-box;padding:6px 13px;border:1px solid rgb(223,226,229)">✔</td><td align="center" style="box-sizing:border-box;padding:6px 13px;border:1px solid rgb(223,226,229)">wall clock</td><td align="center" style="box-sizing:border-box;padding:6px 13px;border:1px solid rgb(223,226,229)"></td><td align="center" style="box-sizing:border-box;padding:6px 13px;border:1px solid rgb(223,226,229)"></td><td align="center" style="box-sizing:border-box;padding:6px 13px;border:1px solid rgb(223,226,229)">✔</td><td align="center" style="box-sizing:border-box;padding:6px 13px;border:1px solid rgb(223,226,229)">✔</td></tr><tr style="box-sizing:border-box;border-top:1px solid rgb(198,203,209)"><td align="right" style="box-sizing:border-box;padding:6px 13px;border:1px solid rgb(223,226,229)"><code style="box-sizing:border-box;font-family:SFMono-Regular,Consolas,"Liberation Mono",Menlo,monospace;font-size:13.6px;padding:0.2em 0.4em;margin:0px;background-color:rgba(27,31,35,0.05);border-radius:3px">py-spy</code></td><td align="center" style="box-sizing:border-box;padding:6px 13px;border:1px solid rgb(223,226,229)">✔</td><td align="center" style="box-sizing:border-box;padding:6px 13px;border:1px solid rgb(223,226,229)">✔</td><td align="center" style="box-sizing:border-box;padding:6px 13px;border:1px solid rgb(223,226,229)"><span style="box-sizing:border-box;font-weight:600">both</span></td><td align="center" style="box-sizing:border-box;padding:6px 13px;border:1px solid rgb(223,226,229)"></td><td align="center" style="box-sizing:border-box;padding:6px 13px;border:1px solid rgb(223,226,229)"></td><td align="center" style="box-sizing:border-box;padding:6px 13px;border:1px solid rgb(223,226,229)">✔</td><td align="center" style="box-sizing:border-box;padding:6px 13px;border:1px solid rgb(223,226,229)">✔</td></tr><tr style="box-sizing:border-box;background-color:rgb(246,248,250);border-top:1px solid rgb(198,203,209)"><td align="right" style="box-sizing:border-box;padding:6px 13px;border:1px solid rgb(223,226,229)"><code style="box-sizing:border-box;font-family:SFMono-Regular,Consolas,"Liberation Mono",Menlo,monospace;font-size:13.6px;padding:0.2em 0.4em;margin:0px;background-color:rgba(27,31,35,0.05);border-radius:3px">memory_profiler</code></td><td align="center" style="box-sizing:border-box;padding:6px 13px;border:1px solid rgb(223,226,229)">✔</td><td align="center" style="box-sizing:border-box;padding:6px 13px;border:1px solid rgb(223,226,229)"></td><td align="center" style="box-sizing:border-box;padding:6px 13px;border:1px solid rgb(223,226,229)"></td><td align="center" style="box-sizing:border-box;padding:6px 13px;border:1px solid rgb(223,226,229)"></td><td align="center" style="box-sizing:border-box;padding:6px 13px;border:1px solid rgb(223,226,229)">✔</td><td align="center" style="box-sizing:border-box;padding:6px 13px;border:1px solid rgb(223,226,229)"></td><td align="center" style="box-sizing:border-box;padding:6px 13px;border:1px solid rgb(223,226,229)"></td></tr><tr style="box-sizing:border-box;border-top:1px solid rgb(198,203,209)"><td align="right" style="box-sizing:border-box;padding:6px 13px;border:1px solid rgb(223,226,229)"></td><td align="center" style="box-sizing:border-box;padding:6px 13px;border:1px solid rgb(223,226,229)"></td><td align="center" style="box-sizing:border-box;padding:6px 13px;border:1px solid rgb(223,226,229)"></td><td align="center" style="box-sizing:border-box;padding:6px 13px;border:1px solid rgb(223,226,229)"></td><td align="center" style="box-sizing:border-box;padding:6px 13px;border:1px solid rgb(223,226,229)"></td><td align="center" style="box-sizing:border-box;padding:6px 13px;border:1px solid rgb(223,226,229)"></td><td align="center" style="box-sizing:border-box;padding:6px 13px;border:1px solid rgb(223,226,229)"></td><td align="center" style="box-sizing:border-box;padding:6px 13px;border:1px solid rgb(223,226,229)"></td></tr><tr style="box-sizing:border-box;background-color:rgb(246,248,250);border-top:1px solid rgb(198,203,209)"><td align="right" style="box-sizing:border-box;padding:6px 13px;border:1px solid rgb(223,226,229)"><code style="box-sizing:border-box;font-family:SFMono-Regular,Consolas,"Liberation Mono",Menlo,monospace;font-size:13.6px;padding:0.2em 0.4em;margin:0px;background-color:rgba(27,31,35,0.05);border-radius:3px">scalene</code> <em style="box-sizing:border-box">(CPU only)</em></td><td align="center" style="box-sizing:border-box;padding:6px 13px;border:1px solid rgb(223,226,229)">✔</td><td align="center" style="box-sizing:border-box;padding:6px 13px;border:1px solid rgb(223,226,229)">✔</td><td align="center" style="box-sizing:border-box;padding:6px 13px;border:1px solid rgb(223,226,229)"><span style="box-sizing:border-box;font-weight:600">both</span></td><td align="center" style="box-sizing:border-box;padding:6px 13px;border:1px solid rgb(223,226,229)">✔</td><td align="center" style="box-sizing:border-box;padding:6px 13px;border:1px solid rgb(223,226,229)"></td><td align="center" style="box-sizing:border-box;padding:6px 13px;border:1px solid rgb(223,226,229)">✔</td><td align="center" style="box-sizing:border-box;padding:6px 13px;border:1px solid rgb(223,226,229)">✔</td></tr><tr style="box-sizing:border-box;border-top:1px solid rgb(198,203,209)"><td align="right" style="box-sizing:border-box;padding:6px 13px;border:1px solid rgb(223,226,229)"><code style="box-sizing:border-box;font-family:SFMono-Regular,Consolas,"Liberation Mono",Menlo,monospace;font-size:13.6px;padding:0.2em 0.4em;margin:0px;background-color:rgba(27,31,35,0.05);border-radius:3px">scalene</code> <em style="box-sizing:border-box">(CPU + memory)</em></td><td align="center" style="box-sizing:border-box;padding:6px 13px;border:1px solid rgb(223,226,229)">✔</td><td align="center" style="box-sizing:border-box;padding:6px 13px;border:1px solid rgb(223,226,229)">✔</td><td align="center" style="box-sizing:border-box;padding:6px 13px;border:1px solid rgb(223,226,229)"><span style="box-sizing:border-box;font-weight:600">both</span></td><td align="center" style="box-sizing:border-box;padding:6px 13px;border:1px solid rgb(223,226,229)">✔</td><td align="center" style="box-sizing:border-box;padding:6px 13px;border:1px solid rgb(223,226,229)">✔</td><td align="center" style="box-sizing:border-box;padding:6px 13px;border:1px solid rgb(223,226,229)">✔</td><td align="center" style="box-sizing:border-box;padding:6px 13px;border:1px solid rgb(223,226,229)">✔</td></tr></tbody></table></div><div dir="ltr">--<br>Professor Emery Berger<br>College of Information and Computer Sciences<br>University of Massachusetts Amherst<br><a href="http://www.emeryberger.org" target="_blank">www.emeryberger.org</a>, @emeryberger</div></div></div></div></div></div></div></div>