Цитирование из многопроцессорной документации :
необходимо защитить «точку входа» программы, используя if __name__ == '__main__'
Inв вашем случае это выглядит так:
from multiprocessing import Pool
def f(x):
lo = 0
for i in range(x):
lo += i
return lo
def f_parallel(x1, x2, x3, x4):
with Pool(processes=4) as pool:
resulto_parallel = pool.map(f, [x1, x2, x3, x4])
return resulto_parallel
if __name__ == '__main__':
print(f_parallel(1, 2, 3, 4))
Ключевым моментом является то, что порожденные процессы будут импортировать ваш скрипт на python, что, если вы не защитите вызов f_parallel(1,2,3,4)
, приведет к бесконечному порождениюподпроцессы.
Примечание : Также добавлено print
, так что результат вызова функции будет фактически установлен в stdout