Flask:第二次调用时,@ app.route中的代码失败(永远运行)

时间:2018-11-19 07:03:06

标签: python flask

我在Flask路由内执行了一些Python metapy代码,该路由在第一次调用时运行得很好(即,用户在应用程序启动后提交了一个表单),但是在第二次运行时并没有终止(即,表单在应用程序启动后第二次提交)。

精确地:

@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(...)函数是永远运行的函数。 由于代码可以在烧瓶外部正常运行,所以我认为我不了解在后台发生了Flask特定的事情。

到目前为止我尝试过的(但没有帮助):

  • 当我在文件顶部显示“ import metapy”语句时, 然后,即使是第一个对ranker.score(...)的调用也会永远运行。
  • 通过将搜索功能放在自己的类中,确保“导入元数据”以及“ idx”和“ ranker”的初始化仅运行一次 在Flask服务器启动时实例化。但是,然后 代码甚至在路由的第一次调用时也不会运行。

是否有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。 (唯一的区别是,由于可用性,我需要采用某些包的requirements.txt中指定的较新版本。)

1 个答案:

答案 0 :(得分:0)

已解决。 Flask集成Web服务器出现问题。部署到另一个Web服务器后,问题就解决了。