msg181403 - (view) |
Author: Guido van Rossum (gvanrossum) *  |
Date: 2013-02-05 00:55 |
The profile module exports convenience functions for run() and runctx(), which wrap the corresponding methods of the Profile object. But perhaps the most useful method, runcall(), is not wrapped. :-( |
|
|
msg181707 - (view) |
Author: Guido van Rossum (gvanrossum) *  |
Date: 2013-02-09 00:16 |
While we're on profile convenience features, how about adding two context managers: - one that just profiles a block and prints the profile (or dumps the data to a file) - one that takes a Profile instance and enables profiling to that instance E.g. (1) with cProfile.runblock([file]): or (2) p = cProfile.Profile() with p: Also a decorator corresponding to (1): @cProfile.runfunc([filename]) def myfunc(args): |
|
|
msg181825 - (view) |
Author: Antoine Pitrou (pitrou) *  |
Date: 2013-02-10 18:14 |
+1 for runcall() and the context manager. |
|
|
msg181911 - (view) |
Author: Guido van Rossum (gvanrossum) *  |
Date: 2013-02-11 16:59 |
Antoine, what about the decorator? I've come across a few use cases. --Guido van Rossum (sent from Android phone) On Feb 10, 2013 10:14 AM, "Antoine Pitrou" <report@bugs.python.org> wrote: > > Antoine Pitrou added the comment: > > +1 for runcall() and the context manager. > > ---------- > nosy: +pitrou > > _______________________________________ > Python tracker <report@bugs.python.org> > <http://bugs.python.org/issue17130> > _______________________________________ > |
|
|
msg181913 - (view) |
Author: Giampaolo Rodola' (giampaolo.rodola) *  |
Date: 2013-02-11 17:29 |
See issue 9285 in which I wrote a decorator for profile/cProfile. That can be modified to work both as a decorator or a context manager by using contextlib.contextmanager. Shall I continue in issue 9285 and rewrite that patch? |
|
|
msg181916 - (view) |
Author: Guido van Rossum (gvanrossum) *  |
Date: 2013-02-11 17:49 |
Sure, I will comment on that issue. |
|
|
msg181921 - (view) |
Author: Antoine Pitrou (pitrou) *  |
Date: 2013-02-11 19:09 |
> Antoine, what about the decorator? I've come across a few use cases. I don't know, I'm thinking that "there should be one obvious way to do it" :-) By that I mean that the context manager is more generic than the decorator. Or do you want to decorate functions from an external library? |
|
|
msg181924 - (view) |
Author: Guido van Rossum (gvanrossum) *  |
Date: 2013-02-11 19:17 |
If I quickly want to profile one function, with the decorator I have to insert a with-statement in its body and mess with the indentation of the entire body. With a decorator it's just a one-line insertion. |
|
|
msg181925 - (view) |
Author: Antoine Pitrou (pitrou) *  |
Date: 2013-02-11 19:17 |
Ah, fair enough. |
|
|
msg181929 - (view) |
Author: Giampaolo Rodola' (giampaolo.rodola) *  |
Date: 2013-02-11 19:57 |
As for runcall() we haven't the ability to freely support kwargs *and* filename. I see two possibilities. Kill kwargs, as such: +def runcall(func, *args, filename=None, sort=-1): + """Run func(*args) under profiler, optionally saving results in + filename. + """ ...or make 'filename_' and 'sort_' two special name kwargs to be used as in: >>> runcall(fun, foo=1, bar=2, filename_='...') Also, there might be some value in adding 'strip_dirs' argument to those functions (run/runctx/runcall). |
|
|
msg182762 - (view) |
Author: Björn Skoglund (bjorns) * |
Date: 2013-02-23 16:56 |
Hello, first patch, be kind. I opted for option 2 so there is top keywords filename_ and sort_ filtered out before calling func. The test in test_profile seems to call runctx but runcall and run are never tested. Not sure if this is missing or intended. |
|
|
msg182798 - (view) |
Author: Giampaolo Rodola' (giampaolo.rodola) *  |
Date: 2013-02-23 19:20 |
I already posted a patch in issue 9285. Maybe we should close this one as a duplicate. |
|
|
msg182802 - (view) |
Author: Björn Skoglund (bjorns) * |
Date: 2013-02-23 19:38 |
Look at that. Sorry, totally missed it. |
|
|