[prev in list] [next in list] [prev in thread] [next in thread] 

List:       gentoo-catalyst
Subject:    Re: [gentoo-catalyst] [PATCH 2/2] main: add a --profile option
From:       Brian Dolbec <dolsen () gentoo ! org>
Date:       2015-12-15 17:26:35
Message-ID: 20151215092635.1bd6808c.dolsen () gentoo ! org
[Download RAW message or body]

On Mon, 23 Nov 2015 07:07:41 -0500
Mike Frysinger <vapier@gentoo.org> wrote:

> When things get slow, this option helps narrow down where things
> are getting hung up.
> ---
>  catalyst/main.py | 24 ++++++++++++++++++++++++
>  1 file changed, 24 insertions(+)
> 
> diff --git a/catalyst/main.py b/catalyst/main.py
> index 3550809..cb90e66 100644
> --- a/catalyst/main.py
> +++ b/catalyst/main.py
> @@ -174,6 +174,9 @@ $ catalyst -f stage1-specfile.spec"""
>  	group.add_argument('--trace',
>  		default=False, action='store_true',
>  		help='trace program output (akin to `sh -x`)')
> +	group.add_argument('--profile',
> +		default=False, action='store_true',
> +		help='profile program execution')
>  
>  	group = parser.add_argument_group('Temporary file
> management') group.add_argument('-a', '--clear-autoresume',
> @@ -243,6 +246,25 @@ def trace(func, *args, **kwargs):
>  	return tracer.runfunc(func, *args, **kwargs)
>  
>  
> +def profile(func, *args, **kwargs):
> +	"""Run |func| through the profile module"""
> +	# Should make this an option.
> +	sort_keys = ('time',)
> +
> +	# Collect the profile.
> +	import cProfile
> +	profiler = cProfile.Profile(subcalls=True, builtins=True)
> +	try:
> +		ret = profiler.runcall(func, *args, **kwargs)
> +	finally:
> +		# Then process the results.
> +		import pstats
> +		stats = pstats.Stats(profiler, stream=sys.stderr)
> +
> stats.strip_dirs().sort_stats(*sort_keys).print_stats() +
> +	return ret
> +
> +
>  def main(argv):
>  	"""The main entry point for frontends to use"""
>  	parser = get_parser()
> @@ -250,6 +272,8 @@ def main(argv):
>  
>  	if opts.trace:
>  		return trace(_main, parser, opts)
> +	elif opts.profile:
> +		return profile(_main, parser, opts)
>  	else:
>  		return _main(parser, opts)
>  

Profiling is good :)


-- 
Brian Dolbec <dolsen>



[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic