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