edq.util.profile
1import cProfile 2import pstats 3import runpy 4import sys 5import typing 6 7import edq.util.dirent 8import edq.util.pyimport 9 10def exec_for_profile( 11 run_target: str, 12 imports: typing.Union[typing.List[str], None] = None, 13 is_module: bool = False, 14 module_args: typing.Union[typing.List[str], None] = None, 15 ) -> None: 16 """ 17 Exec the specified code for use in a profiler. 18 This does not profile the code, only exec's it. 19 20 Note that this function is calling exec(), which is dangerous for unknown code. 21 You should only profile your own code. 22 """ 23 24 if (imports is None): 25 imports = [] 26 27 if (module_args is None): 28 module_args = [] 29 30 profile_globals = globals().copy() 31 for name in imports: 32 profile_globals[name] = edq.util.pyimport.import_name(name) 33 34 old_argv = sys.argv.copy() 35 36 command = run_target 37 if (is_module): 38 profile_globals['run_module'] = runpy.run_module 39 profile_globals['modname'] = run_target 40 sys.argv = [run_target] + module_args 41 42 command = "run_module(modname, run_name = '__main__')" 43 44 try: 45 exec(command, profile_globals, None) # pylint: disable=exec-used 46 except SystemExit: 47 # Ignore exists. 48 pass 49 finally: 50 sys.argv = old_argv 51 52def cprofile( 53 run_target: str, 54 imports: typing.Union[typing.List[str], None] = None, 55 is_module: bool = False, 56 module_args: typing.Union[typing.List[str], None] = None, 57 ) -> pstats.Stats: 58 """ Profile some code and get stats back. """ 59 60 profiler = cProfile.Profile() 61 profiler.enable() 62 63 exec_for_profile(run_target, imports = imports, is_module = is_module, module_args = module_args) 64 65 profiler.disable() 66 67 return pstats.Stats(profiler)
def
exec_for_profile( run_target: str, imports: Optional[List[str]] = None, is_module: bool = False, module_args: Optional[List[str]] = None) -> None:
11def exec_for_profile( 12 run_target: str, 13 imports: typing.Union[typing.List[str], None] = None, 14 is_module: bool = False, 15 module_args: typing.Union[typing.List[str], None] = None, 16 ) -> None: 17 """ 18 Exec the specified code for use in a profiler. 19 This does not profile the code, only exec's it. 20 21 Note that this function is calling exec(), which is dangerous for unknown code. 22 You should only profile your own code. 23 """ 24 25 if (imports is None): 26 imports = [] 27 28 if (module_args is None): 29 module_args = [] 30 31 profile_globals = globals().copy() 32 for name in imports: 33 profile_globals[name] = edq.util.pyimport.import_name(name) 34 35 old_argv = sys.argv.copy() 36 37 command = run_target 38 if (is_module): 39 profile_globals['run_module'] = runpy.run_module 40 profile_globals['modname'] = run_target 41 sys.argv = [run_target] + module_args 42 43 command = "run_module(modname, run_name = '__main__')" 44 45 try: 46 exec(command, profile_globals, None) # pylint: disable=exec-used 47 except SystemExit: 48 # Ignore exists. 49 pass 50 finally: 51 sys.argv = old_argv
Exec the specified code for use in a profiler. This does not profile the code, only exec's it.
Note that this function is calling exec(), which is dangerous for unknown code. You should only profile your own code.
def
cprofile( run_target: str, imports: Optional[List[str]] = None, is_module: bool = False, module_args: Optional[List[str]] = None) -> pstats.Stats:
53def cprofile( 54 run_target: str, 55 imports: typing.Union[typing.List[str], None] = None, 56 is_module: bool = False, 57 module_args: typing.Union[typing.List[str], None] = None, 58 ) -> pstats.Stats: 59 """ Profile some code and get stats back. """ 60 61 profiler = cProfile.Profile() 62 profiler.enable() 63 64 exec_for_profile(run_target, imports = imports, is_module = is_module, module_args = module_args) 65 66 profiler.disable() 67 68 return pstats.Stats(profiler)
Profile some code and get stats back.