Чтение документации: https://docs.python.org/2/library/multiprocessing.html Я решил написать интенсивный код процессора и сравнить многопроцессорность с последовательным вычислением. Прежде всего, если эта библиотека использует многопроцессорность, то почему я вижу только 1 процесс python.exe? Во-вторых, почему последовательные вычисления занимают 12 секунд, а многопроцессорные - 22 секунды?многопроцессор python не использует несколько ядер
серийный код:
from datetime import datetime
def calc_fib(ind):
fb = 1
if ind >= 3:
prev = 1
i = 2
while i < ind:
prev_tmp = fb
fb += prev
prev = prev_tmp
i += 1
return fb
def long_calc_fib(ind):
val = 0
for j in range(500):
val = calc_fib(ind)
return val
if __name__ == "__main__":
t1 = datetime.now()
for i in range(10):
tmp = long_calc_fib(10000)
t2 = datetime.now()
print str(t2 - t1)
многопроцессорная код бассейн:
from datetime import datetime
from multiprocessing.pool import ThreadPool
def calc_fib(ind):
fb = 1
if ind >= 3:
prev = 1
i = 2
while i < ind:
prev_tmp = fb
fb += prev
prev = prev_tmp
i += 1
return fb
def long_calc_fib(ind):
val = 0
for j in range(500):
val = calc_fib(ind)
return val
if __name__ == "__main__":
t1 = datetime.now()
pool = ThreadPool(processes=10)
async_results = []
for i in range(10):
async_results.append(pool.apply_async(long_calc_fib, (10000,)))
for res in async_results:
tmp = res.get()
t2 = datetime.now()
print str(t2 - t1)
Это потому, что поток - это просто подзадача процесса - если вы хотите использовать более одного ядра процессора, вам нужны дополнительные процессы. – ACimander