At a glance, all of these sound like good modernizing enhancements for cprofile. It just takes someone to contribute the work. :)
On Tue, Jan 10, 2017, 8:57 AM Ethan Furman <et...@stoneleaf.us> wrote: > On 01/10/2017 08:36 AM, Thane Brimhall wrote: > > > Does anyone have thoughts on this topic? I assume the silence is because > > this suggestion is too trivial to matter. > > Sometimes it's just a matter of timing. :) > > > I use cProfile a lot, and would like to suggest three > backwards-compatible > > improvements to the API. > > > > 1: When using cProfile on a specific piece of code I often use the > > enable() and disable() methods. It occurred to me that this would > > be an obvious place to use a context manager. > > Absolutely. > > > 2: Enhance the `print_stats` method on Profile to accept more options > > currently available only through the pstats.Stats class. For example, > > strip_dirs could be a boolean argument, and limit could accept an int. > > This would reduce the number of cases you'd need to use the more complex > > API. > > I don't have much experience with cProfile, but this seems reasonable. > > > 3: I often forget which string keys are available for sorting. It would > > be nice to add an enum for these so a user could have their linter and > > IDE check that value pre-runtime. Since it would subclass `str` and > > `Enum` it would still work with all currently existing code. > > Absolutely! :) > > > The current documentation contains the following code: > > > > import cProfile, pstats, io > > pr = cProfile.Profile() > > pr.enable() > > # ... do something ... > > pr.disable() > > s = io.StringIO() > > sortby = 'cumulative' > > ps = pstats.Stats(pr, stream=s).sort_stats(sortby) > > ps.print_stats() > > print(s.getvalue()) > > > > While the code below doesn't exactly match the functionality above (eg. > not > > using StringIO), I envision the context manager working like this, along > > with some adjustments on how to get the stats from the profiler: > > > > import cProfile, pstats > > with cProfile.Profile() as pr: > > # ... do something ... > > pr.print_stats(sort=pstats.Sort.cumulative, limit=10, > strip_dirs=True) > > > > As you can see, the code is shorter and somewhat more self-documenting. > The > > best thing about these suggestions is that as far as I can tell they > would > > be backwards-compatible API additions. > > The `pr.print_stats... line should not be inside the `with` block unless > you want to profile that part as well. > > These suggestions seem fairly uncontroversial. Have you opened an issue > on the issue tracker? > > The fun part of the patch will be the C code, but a Python > proof-of-concept would be useful. > > -- > ~Ethan~ > _______________________________________________ > Python-ideas mailing list > Python-ideas@python.org > https://mail.python.org/mailman/listinfo/python-ideas > Code of Conduct: http://python.org/psf/codeofconduct/ >
_______________________________________________ Python-ideas mailing list Python-ideas@python.org https://mail.python.org/mailman/listinfo/python-ideas Code of Conduct: http://python.org/psf/codeofconduct/