Vous pouvez utiliser ps
.
par exemple, avoir un processus python avec deux threads occupés sur un processeur dual core :
$ ps -p 29492 -L -o pid,tid,psr,pcpu
PID TID PSR %CPU
29492 29492 1 0.0
29492 29493 1 48.7
29492 29494 1 51.9
(PSR est l'identifiant du CPU auquel le thread est actuellement assigné)
vous voyez que les threads s'exécutent sur le même cœur de CPU (à cause du GIL)
en exécutant le même script python en jython, nous voyons que le script utilise les deux cœurs (et il y a de nombreux autres threads de services ou autre, qui sont presque inactifs) :
$ ps -p 28671 -L -o pid,tid,psr,pcpu
PID TID PSR %CPU
28671 28671 1 0.0
28671 28672 0 4.4
28671 28673 0 0.6
28671 28674 0 0.5
28671 28675 0 2.3
28671 28676 0 0.0
28671 28677 1 0.0
28671 28678 1 0.0
28671 28679 0 4.6
28671 28680 0 4.4
28671 28681 1 0.0
28671 28682 1 0.0
28671 28721 1 0.0
28671 28729 0 88.6
28671 28730 1 88.5
vous pouvez traiter la sortie et calculer le CPU total pour chaque cœur CPU.
Malheureusement, cette approche ne semble pas être fiable à 100 %, parfois je vois que dans le premier cas, les deux threads de travail sont signalés comme étant séparés sur chaque cœur de CPU, ou dans le second cas, les deux threads sont signalés comme étant sur le même cœur...