Диспетчер задач и несогласованность psutil - PullRequest
0 голосов
/ 20 июня 2020

У меня есть многопроцессорный код, в котором я хочу назначить конкретный ЦП конкретному процессу. Я не хочу использовать канал для установления связи между родительским и дочерним процессом. Вот код:

import multiprocessing as mp
import psutil


def spawn():
    procs = list()
    conns = list()
    n_cpus = psutil.cpu_count()
    percentage = int(input("Enter Percentage"))
    proc_num = (percentage * n_cpus)//100
    for cpu in range(proc_num):
        affinity = cpu
        parent_conn, child_conn = Pipe()
        p = Process(target=run_child, args=(child_conn,affinity,))
        p.start()
        procs.append(p)
        conns.append(parent_conn)

    for conn in conns:
        try:
            print(conn.recv())
        except EOFError:
            continue

    time.sleep(exec_time)


def run_child(conn, affinity):
    proc = psutil.Process()
    proc_info = proc.pid
    msg = "Process ID: "+str(proc_info)+" CPU: "+str(affinity)
    conn.send(msg)
    conn.close()
    proc.cpu_affinity(affinity)
    while True:
        1*1


if __name__ == '__main__':
    spawn()

Теперь я ввожу процент и проверяю использование per_cpu, используя этот код:

import psutil, time
while True:
     print(psutil.cpu_percent(percpu=True)
     time.sleep(1)

Это показывает количество ядер на 100% в соответствии с Процент ЦП, введенный пользователем (например, для 6 ядер, работающих на 100%, если пользователь вводит использование ЦП 50%, у меня есть 12 логических ядер). Я создал инструмент matplotlib для мониторинга загрузки ЦП и памяти в реальном времени, используя psutil. Теперь psutil точно показывает, сколько ЦП используется, вот снимок экрана системы, работающей с использованием ЦП 50%: enter image description here

And this is the output of percpu utilization:

E:\Internship\Load_creation\stress_test>python per_cpu.py
[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
[3.1, 1.6, 20.3, 1.6, 4.7, 0.0, 1.6, 0.0, 100.0, 0.0, 3.1, 31.2]
[73.9, 67.2, 76.6, 64.1, 78.1, 67.2, 20.3, 1.6, 35.9, 3.0, 36.9, 3.1]
[100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 4.7, 20.3, 3.1, 4.7, 4.7, 14.1]
[100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 18.8, 0.0, 7.7, 1.6, 4.7, 1.6]
[100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 3.1, 1.5, 16.9, 1.5, 4.6, 0.0]
[100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 6.2, 1.6, 6.2, 3.1, 3.1, 15.6]
[100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 7.7, 4.7, 7.8, 4.7, 7.8, 7.8]
[100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 15.6, 9.4, 14.1, 6.2, 12.5, 3.1]
[100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 29.7, 6.2, 4.7, 7.8, 7.8, 7.8]
[100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 33.8, 32.3, 23.1, 35.4, 44.6, 15.4]
[100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 32.8, 29.7, 30.8, 17.2, 42.2, 26.6]
[100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 29.7, 34.4, 40.6, 12.5, 40.0, 23.4]
[100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 21.5, 39.1, 26.2, 15.6, 38.5, 32.8]
[100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 48.4, 18.8, 32.3, 14.1, 26.6, 31.2]
[100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 1.5, 16.9, 1.5, 1.5, 1.5, 1.5]

The readings seem correct apart from the spike in usage of other cores which I couldn't understand. Now the problem is that, the task manager at the same time, shows these readings: введите описание изображения здесь

Q1: Почему существует такая несогласованность в показаниях psutils и taskmanager?

Q2: Почему наблюдается всплеск в других ядрах, когда я не назначаю ни одного процессы к ним?

...