Параллельная интеграция с ODE с использованием SciPy
Я использую SciPys integrate.ode
модуль для интеграции большой системы (~8000 уравнений) ОДУ. Поскольку мне всегда приходится делать несколько таких с разными параметрами, я распараллелил это, используя multiprocessing
Модуль, который, кажется, работает нормально. Тем не менее, документация SciPy гласит:
Предупреждение:
Этот интегратор не является повторно входящим. Вы не можете иметь два экземпляра ode, использующих интегратор "vode" одновременно.
Итак, теперь мой вопрос: могу ли я доверять своим результатам параллельных запусков? Или это Waring также относится к экземплярам в разных процессах?
1 ответ
Если вы попытаетесь использовать интегратор дважды в одном сеансе, вы получите ошибку:
from scipy.integrate import ode
f = lambda x: x
a = ode(f)
b = ode(f)
a.set_integrator('vode')
b.set_integrator('vode')
a.integrate(0.1)
b.integrate(0.1)
a.integrate(0.1)
# IntegratorConcurrencyError: Integrator `vode` can be used to
# solve only a single problem at a time. If you want to integrate
# multiple problems, consider using a different integrator
# (see `ode.set_integrator`)
Если вы не получите эту ошибку в многопроцессорной среде, разумно предположить, что ваши результаты верны.