I am trying to create a process monitor but I am unable to get accurate results comparing my results to windows task manager. I have been using psutil which seems to work fine when looking at the overall cpu and memory usage but doesn't appear to be very accurate for a single process. Memory usage is always higher than task manager and CPU it always random. I am setting the process once on initialise with self.process = psutil.Process(self.pid) and then calling the below method once a second, the process in task manager is running at a constant 5.4% cpu usage and 130mb ram however the below code produces: CPU: 12.5375 Memory 156459008 CPU: 0.0 Memory 156459008 CPU: 0.0 Memory 156459008 CPU: 0.0 Memory 156459008 CPU: 12.5375 Memory 156459008 CPU: 0.0 Memory 156459008 CPU: 0.0 Memory 156459008 Example code: def process_info(self): # I am calling this method twice because I read the first time gets ignored? ignore_cpu = self.process.cpu_percent(interval=None) / psutil.cpu_count() time.sleep(0.1) process_cpu = self.process.cpu_percent(interval=None) / psutil.cpu_count() # I also tried the below code but it was much worse than above # for j in range(10): # if j == 0: # test_list = [] # p_cpu = self.process.cpu_percent(interval=0.1) / psutil.cpu_count() # test_list.append(p_cpu) # process_cpu = (sum(test_list)) / len(test_list) # Memory is about 25mb higher than task manager process_memory = self.process.memory_info().rss print(f"CPU: {process_cpu}") print(f"Memory: {process_memory}") am I using psutil incorrectly or is there a more accurate way to grab the data? Continue reading...