Spaces:
Runtime error
Runtime error
| #!D:\Python_Projects\my_flask\env\Scripts\python.exe | |
| # | |
| # Author: Mike McKerns (mmckerns @caltech and @uqfoundation) | |
| # Copyright (c) 2008-2016 California Institute of Technology. | |
| # Copyright (c) 2016-2024 The Uncertainty Quantification Foundation. | |
| # License: 3-clause BSD. The full license text is available at: | |
| # - https://github.com/uqfoundation/dill/blob/master/LICENSE | |
| ''' | |
| 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() | |
| # grab args for gprof2dot | |
| args = sys.argv[1:-1] | |
| args = ' '.join(args) | |
| # last arg builds the object | |
| obj = sys.argv[-1] | |
| obj = obj.split(';') | |
| # multi-line prep for generating an instance | |
| for line in obj[:-1]: | |
| exec(line) | |
| # one-line generation of an instance | |
| try: | |
| obj = eval(obj[-1]) | |
| except Exception: | |
| print ("Error processing object instance") | |
| sys.exit() | |
| # get object 'name' | |
| objtype = type(obj) | |
| name = getattr(objtype, '__name__', getattr(objtype, '__class__', objtype)) | |
| # profile dumping an object | |
| import dill | |
| import os | |
| import cProfile | |
| #name = os.path.splitext(os.path.basename(__file__))[0] | |
| 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") | |
| # get stats | |
| 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) #XXX: save to file instead of print top 20? | |
| os.remove(f_prof) | |