Flask:代码在@应用程序路径当调用第二个tim时失败(永远运行)

2024-06-30 15:30:34 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一些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之外运行方法中的代码片段(不管我调用它多少次),它运行得很好。只在里面用装饰的方法@应用程序路径(……)它似乎只运行一次。具体地说:ranker评分(…)函数是永久运行的函数。 由于代码在flask外部运行良好,我认为后台发生了一些我不理解的特定于flask的事情。在

到目前为止我所做的努力(但没有帮助):

  • 当文件顶部有“import metapy”语句时, 甚至第一次打电话给ranker评分(…)永远运行。在
  • 通过将搜索功能放在自己的类中,我确保“import-metapy”和“idx”和“ranker”的初始化只运行一次 在Flask服务器启动时实例化。然而,同样 即使在路由的第一次调用时,代码也不会运行。在

有什么特别的东西可以解释这种行为吗?在

----更新:附加信息---配置.toml

^{pr2}$

如前所述,这种行为只发生在第二次调用这个烧瓶路径之后。在本地,一切正常(使用完全相同的数据集和配置.toml)在

更新:MetaPy Flask演示应用程序中的相同行为 我在MetaPy演示应用程序中也有相同的行为:https://github.com/meta-toolkit/metapy-demos。(唯一的区别是,我需要按照要求.txt对于某些软件包,由于可用性)。在


Tags: 代码importform应用程序flask表单路由search