2016-09-30 2 views
1

У меня есть mac, и он имеет 2 физических ядра и 4 логических ядра. Я пытаюсь вычислить многопроцессорность python. Насколько я знаю, каждый процесс обработки использует одно ядро ​​в компьютере, поэтому я считаю, что количество процессов в сценарии python не может превышать число ядер компьютера. Это верно ?многопроцессор python и количество ядер

Но если я выполняю следующий код (он имеет 8 функций), он работает в то же время с версией, которая имеет 4 функции.

from multiprocessing import Process 
import time 
def func1(): 
    for i in range(0,500): 
    print "11111" 
    time.sleep(0.1) 


def func2(): 
    for i in range(500,1000): 
    print "22222" 
    time.sleep(0.1) 

def func3(): 
    for i in range(1000,1500): 
    print "33333" 
    time.sleep(0.1) 


def func4(): 
    for i in range(1500,2000): 
    print "444444" 
    time.sleep(0.1) 

def func5(): 
    for i in range(2000,2500): 
    print "555555" 
    time.sleep(0.1) 


def func6(): 
    for i in range(2500,3000): 
    print "666666666" 
    time.sleep(0.1) 


def func7(): 
    for i in range(3500,4000): 
    print "7777777777" 
    time.sleep(0.1) 

def func8(): 
    for i in range(4500,5000): 
    print "8888888888 " 
    time.sleep(0.1) 

if __name__=='__main__': 
    start_time = time.time() 
    p1 = Process(target = func1) 
    p1.start() 
    p2 = Process(target = func2) 
    p2.start() 
    p3 = Process(target = func3) 
    p3.start() 
    p4 = Process(target = func4) 
    p4.start() 
    p5 = Process(target = func5) 
    p5.start() 
    p6 = Process(target = func6) 
    p6.start() 
    p7 = Process(target = func7) 
    p7.start() 
    p8 = Process(target = func8) 
    p8.start() 
    p1.join() 
    p2.join() 
    p3.join() 
    p4.join() 
    p5.join() 
    p6.join() 
    p7.join() 
    p8.join() 
    print "done" 
    print("--- %s seconds ---" % (time.time() - start_time)) 

Если я запускаю этот код с 4-мя функциями или 8 функций, время выполнения такой же, но количество ядер составляет 4, так что я думаю, что версия 8 функций должна занять больше времени, но это не так. Я что-то упустил?

Спасибо!

ответ

1

Вы можете запустить столько процессов из своего скрипта Python, сколько захотите, и планировщик операционной системы запланирует их запуск на ваших ядрах процессора. Если эти процессы связаны с ЦП, то вы не получите более высокую производительность, запустив больше процессов, чем ядра. Но в вашем примере процессы тратят большую часть времени на сон, и поэтому они не конкурируют за ядра, поэтому 8 процессов могут выполняться в то же время, что и 4.

+0

Спасибо Стив! Теперь я понимаю :) – kashkalik