Python scipy.optimize.fsolve аварийно завершает работу на сервере (Webfaction), несмотря на то, что работает нормально на аналогичном локальном хосте - PullRequest
0 голосов
/ 13 октября 2019

У меня есть персональный сайт, написанный на Django, размещенный на Webfaction. Я пытаюсь создать веб-инструмент, в котором пользователи вводят несколько чисел, сервер получает их на бэкэнд через AJAX, сервер принимает их в качестве входных параметров для определенной системы уравнений и решает их численно с использованием некоторого пакета Python, а сервервозвращает решение через AJAX, и Javascript представляет его пользователю.

Этот процесс работает безупречно, когда я тестирую его на Localhost. Но на сервере Webfaction часто происходит сбой после нескольких итераций функции числового приближения, если входные данные не очень просты.

И scipy.optimize.fsolve, и scipy.optimize.root создают проблему,Я перепробовал несколько «методов», и все они породили проблему. Кроме того, я изначально использовал план Webfaction по 10 ГБ ОЗУ на 1 ГБ, 100 ГБ для хранения SSD, пропускную способность 1 ТБ, общий сервер », и я попытался переключиться на их 30 ГБ / мес. План "облачного сервера" - настройка, похожая на мой Localhost - но, похоже, это не имеет даже малейшего значения.

from scipy.optimize import fsolve
import logging
from forms import *

logger = logging.getLogger(__name__)


def dppsubmit(request):
    form = ParamsForm(request.POST)
    if form.is_valid():
        raw_pd = form.cleaned_data['params']
        #[...code in which I define "pd" from "raw_pd"...]
        def func(x):
            outputs = []
            i = 1
            while i <= len(x):
                #[...code in which I generate the output vector...]
                outputs.append(y)
                i += 1
            logger.log(10, "FUNC ITERATION")
            return outputs
        logger.log(10, "GOT HERE 1")
        solution = fsolve(func, np.asarray([[.01]*num_states], dtype=np.float64))
        logger.log(10, "GOT HERE 2")
        to_return = ",".join(solution.x.tolist())
        return render(request, 'personal/output.html', {'output':to_return})

Как видно из сообщений регистрации в приведенном выше упрощенном коде, когда он работает должным образом, он записывает «GOT HERE 1», затем «FUNC ITERATION» несколько раз, после чего следует«ПОЛУЧИЛ ЗДЕСЬ 2», а затем возвращает строку, которая представляет вектор решения. Но вместо этого он часто записывает «ПОЛУЧИЛ ЗДЕСЬ 1», а затем несколько раз «FUNC ITERATION» (обычно <20), а затем вылетает веб-сайт. </p>

Как я могу получить эту числовую оценку для работы насервер без сбоев?

...