você pode usar ps
.
por exemplo, tendo o processo Python com dois threads ocupados na CPU 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 é a ID da CPU à qual o thread está atualmente atribuído)
você vê que os threads estão rodando no mesmo núcleo da CPU (por causa do GIL)
executando o mesmo script python em jython, vemos que o script está utilizando os dois núcleos (e há muitos outros serviços ou threads, que estão quase inativos):
$ 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
você pode processar a saída e calcular a CPU total para cada núcleo da CPU.
Infelizmente, essa abordagem não parece ser 100% confiável, às vezes vejo que, no primeiro caso, os dois threads de trabalho estão separados para cada núcleo da CPU ou, no último caso, os dois threads estão ligados o mesmo núcleo ..
I
para alternar o modo Irix (em oposição ao modo Solaris ). Quandoon
, a porcentagem exibida na lista de processos é relativa a um thread da CPU . Quandooff
, a referida porcentagem é exibida em relação à capacidade geral da CPU (ou seja, TODOS os threads - também conhecidos como todos os núcleos).