Изменен ваш фрагмент, как показано ниже. В общем, учитывайте следующее:
pool.map(func, data)
Под данными следует понимать данные, которые должны быть распределены по пулу ЦП (и также исключают этот процесс). Далее, по крайней мере, столько элементов, сколько должно быть процессов, чтобы наилучшим образом использовать пул. (Я просто поместил там 10 одинаковых списков).
пропустил аргумент инициализации в конструкции Pool()
, чтобы просто вывести нужные данные после завершения вычисления.
from multiprocessing import Pool, current_process
def multiprocessing_func():
input_list = [0, 1, 2, 3, 4, 5]
print("input list: {}".format(input_list))
print("Output in random order: ")
pool = Pool(10)
result = pool.map(calculate, [input_list]*10)
print()
print("collected:" , result)
pool.close()
pool.join()
def calculate(y_list):
out = [x*4 for x in y_list]
current_process_func(out)
return out
def current_process_func(data):
print("{} output: {}".format(current_process().name, data))
if __name__ == '__main__':
multiprocessing_func()
приводит к:
input list: [0, 1, 2, 3, 4, 5]
Output in random order:
ForkPoolWorker-52 output: [0, 4, 8, 12, 16, 20]
ForkPoolWorker-55 output: [0, 4, 8, 12, 16, 20]
ForkPoolWorker-57 output: [0, 4, 8, 12, 16, 20]
ForkPoolWorker-51 output: [0, 4, 8, 12, 16, 20]
ForkPoolWorker-53 output: [0, 4, 8, 12, 16, 20]
ForkPoolWorker-54 output: [0, 4, 8, 12, 16, 20]
ForkPoolWorker-56 output: [0, 4, 8, 12, 16, 20]
ForkPoolWorker-58 output: [0, 4, 8, 12, 16, 20]
ForkPoolWorker-60 output: [0, 4, 8, 12, 16, 20]
ForkPoolWorker-59 output: [0, 4, 8, 12, 16, 20]
collected: [[0, 4, 8, 12, 16, 20], [0, 4, 8, 12, 16, 20], [0, 4, 8, 12, 16, 20], [0, 4, 8, 12, 16, 20], [0, 4, 8, 12, 16, 20], [0, 4, 8, 12, 16, 20], [0, 4, 8, 12, 16, 20], [0, 4, 8, 12, 16, 20], [0, 4, 8, 12, 16, 20], [0, 4, 8, 12, 16, 20]]
это то, что вы ожидали?