Flask: код внутри @ app.route не выполняется (выполняется вечно) при повторном вызове - PullRequest
0 голосов
/ 19 ноября 2018

У меня есть некоторый мета-код Python, выполняемый внутри маршрута Flask, который прекрасно работает, когда маршрут вызывается в первый раз (т. Е. Пользователь отправляет форму после запуска приложения), но не завершается при запуске во второй раз. (то есть форма отправляется второй раз после запуска приложения).

Точно:

@app.route('/search', methods=['POST'])
def searchPageResults():
    form = SearchForm(request.form)
    import metapy
    idx = metapy.index.make_inverted_index(os.path.abspath("search/config.toml"))
    ranker = metapy.index.OkapiBM25()
    query = metapy.index.Document()
    query.content("auto")
    for result in ranker.score(idx, query):
         print(result)
    return render_template('SearchPage.html', form=form)

Фрагмент кода внутри метода работает нормально, если я запускаю его вне Flask (независимо от того, сколько раз я его вызываю). Только внутри метода, украшенного @ app.route (...), он запускается только один раз. Чтобы быть конкретным: функция ranker.score (...) работает вечно. Поскольку код отлично работает вне колбы, я думаю, что в фоновом режиме происходит что-то специфическое для колбы, я не понимаю.

То, что я до сих пор пробовал (но не помогло):

  • Когда в верхней части файла есть оператор import metapy, тогда даже первый вызов ranker.score (...) выполняется вечно.
  • Я гарантировал, что «import metapy» и инициализация «idx» и «ranker» будут выполняться только один раз, поместив функцию поиска в собственный класс который создается при запуске сервера Flask. Однако и тогда код не будет запущен даже при первом вызове маршрута.

Есть ли что-то конкретное в Колбе, объясняющее это поведение?

---- Обновление: дополнительная информация ----- config.toml

index = "idx"
corpus = "line.toml"
dataset = "data"
prefix = "."
stop-words = "search/german-stopwords.txt"
start-exceptions = "search/sentence-start-exceptions.txt"
end-exceptions = "search/sentence-end-exceptions.txt"
function-words = "search/function-words.txt"
punctuation = "search/sentence-punctuation.txt"

[[analyzers]]
method = "ngram-word"
ngram = 1
filter = [{type = "icu-tokenizer"}, {type = "lowercase"}]

Как уже говорилось, поведение происходит только после второго вызова этого маршрута Flask. Локально все работает нормально (с точно таким же набором данных и config.toml)

Обновление: такое же поведение в демонстрационном приложении MetaPy Flask У меня такое же поведение в демонстрационном приложении MetaPy: https://github.com/meta-toolkit/metapy-demos. (Единственное отличие состоит в том, что мне нужно было взять несколько более новых версий, как указано в файле needs.txt для некоторых пакетов, из-за доступности).

1 Ответ

0 голосов
/ 15 марта 2019

решаемая.Возникла проблема с интегрированным веб-сервером Flask.После развертывания на другом веб-сервере проблема была решена.

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