вы можете использовать ps
.
, например, иметь процесс python с двумя занятыми потоками на двухъядерном процессоре:
$ 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 - это идентификатор процессора, которому в данный момент назначен поток)
вы видите, что потоки работают на одном и том же ядре процессора (из-за GIL)
, выполняющие один и тот же сценарий python в jython, мы видим, что сценарий использует оба ядра (и есть много другихслужбы или любых других потоков, которые почти бездействуют):
$ 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
вы можете обработать вывод и рассчитать общую загрузку ЦП для каждого ядра ЦП.
К сожалению, этот подход, похоже, не подходитНа 100% надежно, иногда я вижу, что в первом случае, как сообщается, два рабочих потока разделены на каждое ядро ЦП, или в последнем случае, как сообщается, два потока находятся на одном ядре.