Line Profiler¶
The line_profiler module for doing line-by-line profiling of functions
Github |
|
Pypi |
|
ReadTheDocs |
Installation¶
Releases of line_profiler
and kernprof
can be installed
using pip
pip install line_profiler
The package also provides extras for optional dependencies, which can be installed via:
pip install line_profiler[all]
Line Profiler Basic Usage¶
To demonstrate line profiling, we first need to generate a Python script to
profile. Write the following code to a file called demo_primes.py
.
from line_profiler import profile
@profile
def is_prime(n):
'''
Check if the number "n" is prime, with n > 1.
Returns a boolean, True if n is prime.
'''
max_val = n ** 0.5
stop = int(max_val + 1)
for i in range(2, stop):
if n % i == 0:
return False
return True
@profile
def find_primes(size):
primes = []
for n in range(size):
flag = is_prime(n)
if flag:
primes.append(n)
return primes
@profile
def main():
print('start calculating')
primes = find_primes(100000)
print(f'done calculating. Found {len(primes)} primes.')
if __name__ == '__main__':
main()
In this script we explicitly import the profile
function from
line_profiler
, and then we decorate function of interest with @profile
.
By default nothing is profiled when running the script.
python demo_primes.py
The output will be
start calculating
done calculating. Found 9594 primes.
The quickest way to enable profiling is to set the environment variable
LINE_PROFILE=1
and running your script as normal.
LINE_PROFILE=1 python demo_primes.py
This will output 3 files: profile_output.txt, profile_output_<timestamp>.txt, and profile_output.lprof and stdout will look something like:
start calculating
done calculating. Found 9594 primes.
Timer unit: 1e-09 s
0.65 seconds - demo_primes.py:4 - is_prime
1.47 seconds - demo_primes.py:19 - find_primes
1.51 seconds - demo_primes.py:29 - main
Wrote profile results to profile_output.txt
Wrote profile results to profile_output_2023-08-12T193302.txt
Wrote profile results to profile_output.lprof
To view details run:
python -m line_profiler -rtmz profile_output.lprof
For more control over the outputs, run your script using kernprof
.
The following invocation will run your script, dump results to
demo_primes.py.lprof
, and display results.
python -m kernprof -lvr demo_primes.py
Note: the -r
flag will use “rich-output” if you have the rich
module installed.
See also
autoprofiling usage in:
line_profiler.autoprofile
- line_profiler package
- Subpackages
- line_profiler.autoprofile package
- Submodules
- line_profiler.autoprofile.ast_profle_transformer module
- line_profiler.autoprofile.ast_tree_profiler module
- line_profiler.autoprofile.autoprofile module
- line_profiler.autoprofile.line_profiler_utils module
- line_profiler.autoprofile.profmod_extractor module
- line_profiler.autoprofile.util_static module
- Module contents
- Submodules
- line_profiler.autoprofile package
- Submodules
- line_profiler.__main__ module
- line_profiler._line_profiler module
LineProfiler
LineProfiler.add_function()
LineProfiler.c_code_map
LineProfiler.c_last_time
LineProfiler.code_hash_map
LineProfiler.code_map
LineProfiler.disable()
LineProfiler.disable_by_count()
LineProfiler.dupes_map
LineProfiler.enable()
LineProfiler.enable_by_count()
LineProfiler.enable_count
LineProfiler.functions
LineProfiler.get_stats()
LineProfiler.last_time
LineProfiler.threaddata
LineProfiler.timer_unit
LineStats
__pyx_unpickle_LineProfiler()
_code_replace()
label()
- line_profiler.explicit_profiler module
- line_profiler.ipython_extension module
- line_profiler.line_profiler module
- Module contents
- Subpackages
- kernprof module