Невозможно запустить какие-либо другие функции во время работы приложения Flask - PullRequest
0 голосов
/ 29 апреля 2019

Я создаю веб-приложение, в котором пользователь должен ввести несколько чисел, а сервер вычислит некоторые функции и сгенерирует несколько графиков. Расчет и построение графиков происходит в отдельном модуле (файл * .py). Теперь проблема заключается в их интеграции.

Допустим, мои расчеты происходят в calc.py и plotting.py,

, поэтому я должен импортировать их как:

import calculate
import plotting

в зависимости от того, что пользователь дает мне в качестве входных данных, я должен рассчитать и построить график, поэтому вначале я определяю функцию для этого

def calculation(a,b)
    #do something and 
    #save the plots 
    #and give me the result

а затем моя фляга:

app = Flask(__name__)

if __name__ == '__main__':

    app.run(debug=True,port=8080)
    calculation(a,b)

но функция расчета никогда не запускается. Flask, однако, работает правильно и может отображать мои другие html-страницы, но функция вычислений никогда не запускается.

в чем проблема? Более того, я обнаружил, что функция print () также не работает, когда запускается колба.

Ответы [ 3 ]

3 голосов
/ 29 апреля 2019

app.run блокируется во время работы колбы. Эту функцию необходимо вызывать по маршруту колбы или вызывать в фоновом режиме заранее.

Посмотрите другие варианты здесь Запустите код после запуска колбы

0 голосов
/ 30 апреля 2019

Как упомянуто выше, app.run() запускает приложение, и после этого код не запускается.

Кроме того, ваш код не имеет особого смысла. Как вы сказали, вы хотите, чтобы пользователь мог сделать некоторые вычисления. Итак, вы, вероятно, хотите, чтобы он или она вводили некоторые данные. Вы не можете сделать это при запуске приложения.

Итак, как говорит smallpants , вы хотите создать страницу, с которой пользователь может взаимодействовать. Это может выглядеть так (используя smallpants answer):

@app.route('/calculate')
def calculation()
    a = 1
    b = 2
    return template(result.html, result=a+b)

- но здесь пользователь не может ничего вводить.

Так, может быть, что-то вроде этого:

@app.route('/calculate/<int:a>/<int:b>')
def calculation(a,b)
    return template(result.html, result=a+b)

- здесь пользователь может вводить данные в URL.

Или, может быть, страница с формой (я рекомендую flask-wtforms )

Чтобы сохранить ваше приложение в некотором смысле MVC , я бы порекомендовал сделать вашу страницу для ввода (если это форма, параметр url, ...), которая затем запускает ваш calculation() из calculation.py файл.

Удачи в изучении Flask!

0 голосов
/ 29 апреля 2019

Вам нужно будет вызвать эту функцию из маршрута приложения. Например:

@app.route('/calculate')
def calculation(a,b)
    #do something and 
    #save the plots 
    #and give me the result

    return

Это должно быть помещено в основной скрипт приложения для удобства.

Если вы действительно хотите сделать это по-своему, тогда calculation(a,b) следует запустить выше app.run(), но, очевидно, вернуть что-то, чтобы его можно было использовать в другом месте приложения. Но результат не может быть передан app.run().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...