Source code for labscript_utils.impprof

#####################################################################
#                                                                   #
# impprof.py                                                        #
#                                                                   #
# Copyright 2013, Monash University                                 #
#                                                                   #
# This file is part of the labscript suite (see                     #
# http://labscriptsuite.org) and is licensed under the Simplified   #
# BSD License. See the license.txt file in the root of the project  #
# for the full license.                                             #
#                                                                   #
#####################################################################
import time

[docs]class _ProfilingImporter(object): def __init__(self): self.enabled = False self.normal_import = None self.depth = 0 self.threshold = 0 try: self.builtins_dict = __builtins__.__dict__ except AttributeError: self.builtins_dict = __builtins__
[docs] def profiling_import(self, name, *args,**kwargs): self.depth += 1 start_time = time.time() try: result = self.normal_import(name, *args, **kwargs) finally: self.depth -= 1 time_taken = time.time() - start_time if time_taken > self.threshold: print(' '*self.depth + '[%.2f] import %s'%(time_taken, name)) return result
[docs] def enable(self, threshold=0.1): if self.enabled: raise RuntimeError('Already enabled') self.enabled = True self.threshold = threshold self.normal_import = __import__ self.builtins_dict['__import__'] = self.profiling_import
[docs] def disable(self): if not self.enabled: raise RuntimeError('Not enabled') self.enabled = False self.builtins_dict['__import__'] = self.normal_import self.normal_import = None
_profiling_importer = _ProfilingImporter() enable = _profiling_importer.enable disable = _profiling_importer.disable if __name__ == '__main__': enable(threshold=0.05) import IPython