Implement a code profiler
Something like:
import cProfile
import pstats
# supports only single arg
cProfile.run('function(argument)', 'funstats')
f = pstats.Stats('funstats')
f.strip_dirs()
f.sort_stats('tottime')
f.print_stats(0.1)
Or/and a function spawning a separate process monitoring CPU usage of a target process, e.g. :
import multiprocessing as mp
import numpy as np
import psutil
import time
def monitor(target, *args):
worker_process = mp.Process(target=target, args=args)
worker_process.start()
p = psutil.Process(worker_process.pid)
# log cpu usage of `worker_process` every 10 ms
cpu_percents = []
while worker_process.is_alive():
cpu_percents.append(p.cpu_percent())
time.sleep(0.01)
worker_process.join()
return cpu_percents
cpu_percents = monitor(function, arg0, arg1)
cpu_percents = np.array(cpu_percents)
Edited by Edoardo Zatterin