Использование 100% всех ядер с модулем многопроцессорности

У меня есть два фрагмента кода, которые я использую, чтобы узнать о многопроцессорности в Python 3.1. Моя цель - использовать 100% всех доступных процессоров. Однако фрагменты кода здесь достигают только 30% - 50% на всех процессорах.

Можно ли каким-либо образом «заставить» python использовать все 100%? Ограничивает ли ОС (windows 7, 64bit) доступ Python к процессорам? Пока работают приведенные ниже фрагменты кода, я открываю диспетчер задач и наблюдаю за скачком процессора, но никогда не достигаю и не поддерживаю 100%. В дополнение к этому, я вижу несколько процессов python.exe, созданных и уничтоженных по пути. Как эти процессы связаны с процессорами? Например, если я создаю 4 процесса, каждый процесс не использует собственное ядро. Вместо этого, какие процессы используются? Все ядра разделяют? И если да, то это ОС заставляет процессы разделять ядра?

фрагмент кода 1

import multiprocessing

def worker():
    #worker function
    print ('Worker')
    x = 0
    while x < 1000:
        print(x)
        x += 1
    return

if __name__ == '__main__':
    jobs = []
    for i in range(50):
        p = multiprocessing.Process(target=worker)
        jobs.append(p)
        p.start()

фрагмент кода 2

from multiprocessing import Process, Lock

def f(l, i):
    l.acquire()
    print('worker ', i)
    x = 0
    while x < 1000:
        print(x)
        x += 1
    l.release()

if __name__ == '__main__': 
    lock = Lock()
    for num in range(50):
        Process(target=f, args=(lock, num)).start()
44
задан martineau 27 January 2018 в 22:46
поделиться