On Wed, Jan 25, 2012 at 10:19 AM, Yuval Greenfield
On Wed, Jan 25, 2012 at 8:36 AM, David Townshend
wrote: [...] Any major objections to this?
At first this sounded like a good idea but 2 things pop to mind:
1. How does one get the pstat profiling output from the context manager? Will printing out the results be the only option?
The same way as currently:
profile = cProfile.Profile() with profile: do_something() profile.dump_stats(filename) Perhaps it would be a good idea to provide a convenience function (like run()), so that: with cProfile.do(filename): do_something() I don't like calling the function do(), but I can't think of anything better off-hand, and it illustrates my point.
1. Usually when I profile I don't want to touch the code at all so eventually if I'll use this context manager it'll be more akin to
with profile.Profiler(): main()
Which isn't much of a win over
profile.run('main()')
I agree, but this isn't the use case.
Now if you're talking about a reentrant profiler, that's interesting:
profiler = profile.Profiler()
while is_working: with profiler: do_hard_task()
do_a_hard_but_i_dont_care_now_task()
with profiler: do_a_diff_hard_task()
and then I can call whatever method is there to get the pstat. If this is the vision then it sounds awesome.
And this is the use case! I'm not entirely sure how re-entrancy would be dealt with by the profiler though. From what I read in the source code it looks like it would all accumulate, and this is certainly the way I would expect it to behave, but I'd need to run a few tests to be sure.