簡體   English   中英

Flask:第二次調用時,@ app.route中的代碼失敗(永遠運行)

[英]Flask: code inside a @app.route fails (runs forever) when called a second time

我在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(...)的首次調用也將永遠運行。
  • 我通過將搜索功能放在自己的Class中(在Flask服務器啟動時實例化),確保“ 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 (唯一的區別是由於可用性,我需要采用一些包的requirements.txt中指定的較新版本)。

解決了。 Flask集成Web服務器出現問題。 一旦部署到另一個Web服務器,問題就解決了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM