Без многопроцессорности я выполнил этот код за 0.07 с. Многопроцессорная версия заняла 0,28 с. Создание некоторого пула процессов займет несколько раз, и оно может не стоить этого.
Я рекомендую не печатать во время процесса, так как это может создать эффект воронки (ввод-вывод всегда является проблемой для параллельных процессов)
Немного изменив свой код:
import time
import multiprocessing
def basic_func(x):
if x == 0:
return 'zero'
elif x % 2 == 0:
return 'even'
else:
return 'odd'
def multiprocessing_func(x):
y = x * x
return basic_func(y)
И сравнение результатов:
starttime = time.time()
for each in range(0, 100000000):
multiprocessing_func(each)
print('That took {} seconds'.format(time.time() - starttime))
Взял 34с
starttime = time.time()
pool = multiprocessing.Pool(processes=10)
pool.map(multiprocessing_func, range(0, 100000000))
pool.close()
print('That took {} seconds'.format(time.time() - starttime))
Взял 9,6 с
Видите, что "та же самая" проблема имела радикально разные результаты. Ответ на ваш вопрос невозможен, он слишком сильно зависит от исходной проблемы, эффектов последовательности и баланса между продолжительностью задачи и стоимостью создания пула процессов.