|
|
| |
| |
| |
| |
| |
| |
| ''' |
| build profile graph for the given instance |
| |
| running: |
| $ get_gprof <args> <instance> |
| |
| executes: |
| gprof2dot -f pstats <args> <type>.prof | dot -Tpng -o <type>.call.png |
| |
| where: |
| <args> are arguments for gprof2dot, such as "-n 5 -e 5" |
| <instance> is code to create the instance to profile |
| <type> is the class of the instance (i.e. type(instance)) |
| |
| For example: |
| $ get_gprof -n 5 -e 1 "import numpy; numpy.array([1,2])" |
| |
| will create 'ndarray.call.png' with the profile graph for numpy.array([1,2]), |
| where '-n 5' eliminates nodes below 5% threshold, similarly '-e 1' eliminates |
| edges below 1% threshold |
| ''' |
|
|
| if __name__ == "__main__": |
| import sys |
| if len(sys.argv) < 2: |
| print ("Please provide an object instance (e.g. 'import math; math.pi')") |
| sys.exit() |
| |
| args = sys.argv[1:-1] |
| args = ' '.join(args) |
| |
| obj = sys.argv[-1] |
| obj = obj.split(';') |
| |
| for line in obj[:-1]: |
| exec(line) |
| |
| try: |
| obj = eval(obj[-1]) |
| except Exception: |
| print ("Error processing object instance") |
| sys.exit() |
|
|
| |
| objtype = type(obj) |
| name = getattr(objtype, '__name__', getattr(objtype, '__class__', objtype)) |
|
|
| |
| import dill |
| import os |
| import cProfile |
| |
| cProfile.run("dill.dumps(obj)", filename="%s.prof" % name) |
| msg = "gprof2dot -f pstats %s %s.prof | dot -Tpng -o %s.call.png" % (args, name, name) |
| try: |
| res = os.system(msg) |
| except Exception: |
| print ("Please verify install of 'gprof2dot' to view profile graphs") |
| if res: |
| print ("Please verify install of 'gprof2dot' to view profile graphs") |
|
|
| |
| f_prof = "%s.prof" % name |
| import pstats |
| stats = pstats.Stats(f_prof, stream=sys.stdout) |
| stats.strip_dirs().sort_stats('cumtime') |
| stats.print_stats(20) |
| os.remove(f_prof) |
|
|