25
25
26
26
27
27
B_UNITS = ['' , 'KB' , 'MB' , 'GB' , 'TB' ]
28
+ cpu_load = []
28
29
29
30
def bytes_to_human (bytes_ ):
30
31
unit = 0
@@ -75,8 +76,6 @@ def __init__(self):
75
76
self .settings ['sensors' ][sensor .name ] = (sensor .desc , sensor .cmd )
76
77
77
78
#self.update_regex()
78
-
79
- self .last = ps .cpu_times ()
80
79
self ._last_net_usage = [0 , 0 ] # (up, down)
81
80
82
81
#@staticmethod
@@ -255,11 +254,18 @@ def get_results(self):
255
254
res = {}
256
255
from preferences import Preferences
257
256
257
+ global cpu_load
258
+ cpu_checked = False
259
+ cpus = re .compile ("\Acpu\d*\Z" )
260
+
258
261
#print (self.settings["custom_text"]) custom_text is the full visible string seen in Preferences edit field
259
262
for sensor in Preferences .sensors_regex .findall (
260
263
self .settings ["custom_text" ]):
261
264
262
265
sensor = sensor [1 :- 1 ]
266
+ if cpus .match (sensor ) and cpu_checked == False :
267
+ cpu_load = ps .cpu_percent (interval = 0 , percpu = True ) # We call this only once per update
268
+ cpu_checked = True
263
269
264
270
instance = self .get (sensor )
265
271
@@ -354,31 +360,15 @@ def get_value(self, sensor):
354
360
355
361
def _fetch_cpu (self , percpu = False ):
356
362
if percpu :
357
- return ps .cpu_percent (interval = 0 , percpu = True )
358
-
359
- last = self .last
360
- current = ps .cpu_times ()
361
- if not last :
362
- last = current
363
-
364
- total_time_passed = sum (
365
- [v - last .__dict__ [k ]
366
- if not isinstance (v , list )
367
- else 0
368
- for k , v in current .__dict__ .items ()])
369
-
370
- sys_time = current .system - last .system
371
- usr_time = current .user - last .user
363
+ return cpu_load
372
364
373
- self .last = current
365
+ r = 0.0 ;
366
+ for i in cpu_load :
367
+ r += i
374
368
375
- if total_time_passed > 0 :
376
- sys_percent = 100 * sys_time / total_time_passed
377
- usr_percent = 100 * usr_time / total_time_passed
378
- return sys_percent + usr_percent
379
- else :
380
- return 0
369
+ r /= ps .NUM_CPUS
381
370
371
+ return r
382
372
383
373
class MemSensor (BaseSensor ):
384
374
name = 'mem'
@@ -547,4 +537,4 @@ def run(self):
547
537
while self ._parent .alive .isSet ():
548
538
data = self .fetch ()
549
539
self ._parent .update (data )
550
- time .sleep (self .mgr .get_interval ())
540
+ time .sleep (self .mgr .get_interval ())
0 commit comments