При использовании метода fork для создания подпроцессов (по умолчанию для Mac OS) процессы разветвляются (в основном копируются) при создании Pool
. Это означает, что в вашем коде разветвленные потомки еще не выполнили создание f
, а вместо этого ждут выполнения задач из основного процесса.
Прежде всего вы не должны выполнять «активный» код (кроме определения функций). , классы, константы) непосредственно в сценарии, но переместить его в функции. Ваш код может выглядеть так:
import numpy as np
import multiprocessing as mp
def f(x):
return x**2
def g(x):
return x + 1
def main():
x = np.array([1,2,3,4,5,6])
pool = mp.Pool(3)
result = pool.map(f,x)
result2 = pool.map(g,x)
print('result=',result,'and result2=',result2)
# Should be nearly the only "active" statement
main()
Или, может быть, лучше в вашем случае, я думаю:
import numpy as np
import multiprocessing as mp
def f(x):
return x**2
def g(x):
return x + 1
def proc_f():
global x, pool
return pool.map(f,x)
def proc_g():
global x, pool
return pool.map(g,x)
def main():
global x, pool
x = np.array([1,2,3,4,5,6])
pool = mp.Pool(3)
result = proc_f()
result2 = proc_g()
print('result=',result,'and result2=',result2)
# Should be nearly the only "active" statement
main()