Python пафосная многопроцессорная проблема «не определено» - PullRequest
0 голосов
/ 22 января 2020

Я использую 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 не определена для рабочих в пуле. Есть ли способ контролировать это? Или я должен просто инициализировать рабочий пул в последний момент?

...