Python 使用Flask应用程序作为非web相关程序的接口

Python 使用Flask应用程序作为非web相关程序的接口,python,flask,Python,Flask,我想这是一个关于最佳实践的问题 我对web开发、web框架等有点陌生。我计划用Flask创建一个网站。我对制作一个应用程序很好奇,这个应用程序本质上是一个命令行程序的接口。比如说,我有一个Python命令行程序,它接受一个单词并打印出该单词的所有有效字谜。这种逻辑在哪里/如何适合我的烧瓶应用程序?是这样的吗 from anagram import compute_all_anagrams @app.route("/result?word=<word>") # I'm not sur

我想这是一个关于最佳实践的问题

我对web开发、web框架等有点陌生。我计划用Flask创建一个网站。我对制作一个应用程序很好奇,这个应用程序本质上是一个命令行程序的接口。比如说,我有一个Python命令行程序,它接受一个单词并打印出该单词的所有有效字谜。这种逻辑在哪里/如何适合我的烧瓶应用程序?是这样的吗

from anagram import compute_all_anagrams

@app.route("/result?word=<word>") # I'm not sure if this is correct usage of route
def result_page(word):
    result = compute_all_anagrams(word) # returns a list of anagrams
    render_template("result.html", result=result)
从字谜导入计算所有字谜
@app.route(“/result?word=”)#我不确定这是否正确使用了route
def结果页面(word):
结果=计算所有字谜(word)#返回字谜列表
render_模板(“result.html”,result=result)
其中result.html是显示结果列表的模板

当然,这里我不会让我的字谜程序打印任何东西,而是将其作为字符串数组返回

另外,如果计算所有字谜需要一段时间,比如说10秒,会怎么样?这将如何改变情况


谢谢

是的,你有主意了

如果计算需要很长时间,可以考虑使用ajax或类似的客户端“呈现…”消息。因此,您将生成一个后台作业—最简单的方法实际上是完全运行一个外部进程—然后每次“完成了吗?”请求传入时,您都会检查它是否仍在运行,如果没有,则返回结果(例如,从一个文件),如果它仍在运行,则告诉客户端

默认情况下,flask内置的开发Web服务器会在你在前台做长时间的事情时被阻止——这对多用户来说是不好的,但对单用户来说是好的“我只想通过手机控制一些任务”。这就是为什么有许多其他服务器可以插入flask或任何其他普通的python web框架。这些被称为WSGI服务器。一个好的“默认”是“waiteress”,这是一个纯python服务器,因此不需要任何额外的lib或任何东西。gevent WSGI服务器、gunicorn、uwsgi。。。但对于小型单用户(或少数)应用程序来说,这并不重要

如果你把东西放在互联网上,这样公众就可以访问它们,那么通常最好将你的flask应用程序隐藏在nginx(或类似软件)后面,作为“反向代理”,这样可以限制请求的数量,而不会惊慌失措,并且通常可以保持事情正常

但无论如何,对于长时间的计算任务,10秒的响应时间是可以的。如果事情需要一分钟以上的时间,那么我想说,您当然应该研究这些任务的某种外部过程,并对其进行监控

你需要小心的是,其他人不能开始这样的工作,虽然它很容易让你的计算机由许多人都要求工作,这需要很长的时间来计算。您应该在此类服务上粘贴密码(至少!)保护

您使用的路线是错误的-
/result/
就足够了。比赛结束后有什么事吗?实际上不是路由的一部分-它是一个请求参数。您可以通过flask.request对象访问这些内容(检查文档)

玩得开心!:-)