From 2eb5e9b42de2d43b3482e7da07a5b6aa51f403f7 Mon Sep 17 00:00:00 2001 From: Dave Halter Date: Wed, 28 Nov 2018 09:52:31 +0100 Subject: [PATCH] Improve the profiling script --- scripts/profile_output.py | 25 ++++++++++++++++--------- 1 file changed, 16 insertions(+), 9 deletions(-) diff --git a/scripts/profile_output.py b/scripts/profile_output.py index f692e002..135c8566 100755 --- a/scripts/profile_output.py +++ b/scripts/profile_output.py @@ -1,10 +1,10 @@ -#!/usr/bin/env python +#!/usr/bin/env python3.6 """ -Profile a piece of Python code with ``cProfile``. Tries a completion on a +Profile a piece of Python code with ``profile``. Tries a completion on a certain piece of code. Usage: - profile.py [] [-n ] [-d] [-o] [-s ] + profile.py [] [-n ] [-d] [-o] [-s ] [-i] profile.py -h | --help Options: @@ -12,34 +12,41 @@ Options: -n Number of passes before profiling [default: 1]. -d --debug Enable Jedi internal debugging. -o --omit Omit profiler, just do a normal run. + -i --infer Infer types instead of completions. -s Sort the profile results, e.g. cum, name [default: time]. """ import time -import cProfile +import profile from docopt import docopt import jedi -def run(code, index): +def run(code, index, infer=False): start = time.time() - result = jedi.Script(code).completions() + script = jedi.Script(code) + if infer: + result = script.goto_definitions() + else: + result = script.completions() print('Used %ss for the %sth run.' % (time.time() - start, index + 1)) return result def main(args): code = args[''] + infer = args['--infer'] n = int(args['-n']) + for i in range(n): - run(code, i) + run(code, i, infer=infer) jedi.set_debug_function(notices=args['--debug']) if args['--omit']: - run(code, n) + run(code, n, infer=infer) else: - cProfile.runctx('run(code, n)', globals(), locals(), sort=args['-s']) + profile.runctx('run(code, n, infer=infer)', globals(), locals(), sort=args['-s']) if __name__ == '__main__':