Я использую pathos
для многопроцессорной обработки и пытаюсь понять следующее поведение. Следующий пример работает нормально:
from pathos.multiprocessing import ProcessPool
import numpy as np
def f(x0, Dt, n_steps):
x = x0
for j in range(n_steps):
x+=-Dt * x
return x
Dt = 0.1
n_steps = 10
n_runs = 8
x0_vals = np.linspace(-1,1,n_runs)
g = lambda x0: f(x0, Dt, n_steps)
pool = ProcessPool(nodes=4)
results =pool.map(g, x0_vals)
print(results)
производит
[-0.3486784401, -0.24905602864285714, -0.1494336171857143, -0.049811205728571444, 0.04981120572857141, 0.1494336171857142, 0.24905602864285714, 0.3486784401]
Теперь, если вместо этого я поместил pool = ProcessPool(nodes=4)
ранее в коде, как
from pathos.multiprocessing import ProcessPool
import numpy as np
def f(x0, Dt, n_steps):
x = x0
for j in range(n_steps):
x+=-Dt * x
return x
pool = ProcessPool(nodes=4)
Dt = 0.1
n_steps = 10
n_runs = 8
g = lambda x0: f(x0, Dt, n_steps)
x0_vals = np.linspace(-1,1,n_runs)
results =pool.map(g, x0_vals)
#pool.clear()
print(results)
тогда я получаю ошибки вроде:
NameError: name 'Dt' is not defined
Я предполагаю, что это потому, что переменная Dt
не определена для рабочих в пуле. Есть ли способ контролировать это? Или я должен просто инициализировать рабочий пул в последний момент?