Параллельная интеграция с 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`)

Если вы не получите эту ошибку в многопроцессорной среде, разумно предположить, что ваши результаты верны.

Другие вопросы по тегам